jQuery ajax请求 - IE11访问被拒绝

5

问题

我正在使用以下函数通过jQuery进行ajax请求:

function ajaxRequest(requestName,responseFunction,parameters) {
 console.log('Making request ' + requestName);
 var now = new Date();
 $.ajax({
    type: "GET",
    url: "ajax.php",
    error: function(jqXHR,textStatus,errorThrown ) {
        console.log('Error: ' + textStatus + ' ' + errorThrown);
    },
    success:function(msg) {
        console.log('Success! ' + msg);
    }
 });
}

有哪些可能导致“拒绝访问”错误的原因?有没有什么方法可以获得更有意义的错误消息?
更多信息...
我目前正在调用该函数以保存输入字段中的值。 这在所有测试过的浏览器中都有效。
我还从onpaste事件中调用此函数(即),以执行相同的操作,但只有在IE11中失败。 错误仅为“拒绝访问”。
请注意,这不是跨域请求,而是请求位于同一目录中的文件。
在以下环境中进行了测试:
Mac + Safari Mac + Chrome WinXP + IE8 Win7 + IE9 Win 8 + IE10 in 8.1 + IE11(唯一引起问题的浏览器)。
请注意,我已剥离了代码的某些无关部分,例如使用responseFunction和parameters变量。

那是实际的相对URL吗? - epascarello
尝试通过添加以下代码进行操作 - <meta http-equiv="X-UA-Compatible" content="IE=Edge" > - Domain
epascarello - 是的,我已经用它进行了测试。感谢WisdmLabs的建议,但那并没有产生任何区别。 - Ben
请确保您不要从CDN(例如Google Hosted Libraries)加载jQuery资产。因为域名不同,这违反了Microsoft用于保护Internet Explorer免受跨站脚本攻击的某些安全协议。另一个尝试的解决方案是更改您的jQuery版本。 - Domain
感谢WisdmLabs - 再次提供了很好的想法,但是我尝试过所有的方法。 - Ben
你验证过HTML了吗?为什么要验证呢?因为无效的HTML会强制IE进入兼容模式,从而导致奇怪的事情发生。 - Sparky
1个回答

7

经过大量研究,我唯一能想到的可行解决方案是使用setTimeout,将AJAX请求延迟1毫秒后再触发,而不是立即触发。我猜测这可能是IE11中的某个bug,但希望这个解决方案对某些人有用。

最终,我修改了这段代码:

ajaxRequest('save_function','response_function',params);

转换为:

setTimeout( (function(params) {
    return function() {
        ajaxRequest('save_function','update_save_marksheet_mark',params);
    };
})(params),1);

需要澄清的是,第一行代码在测试的所有浏览器中都可以正常工作,包括IE7,但不包括IE11。


你是怎么想出这个解决方案的?你能指出其他相关信息吗? - Sam
说实话,这是一个试错的过程 - 因为错误只发生在特定的情况下(即onPaste事件),我想如果我能够复制它,就好像它不是同时进行onPaste事件一样,它应该可以工作 - 而且它确实做到了 :) - Ben
1
它确实解决了我的问题! - Sam
1
答案也适用于Windows 10。我在Windows 10和IE 11上遇到了同样的问题。你的“修复”是唯一有效的方法。 - Fabian S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接