IE 11的奇怪的AJAX错误

时间:2013-11-26 14:19:54

标签: javascript jquery ajax internet-explorer

我目前正在开发一个纯HTML和JavaScript驱动的Web应用程序,该应用程序使用CORS来使用远程Web服务,但目前在使用IE 11进行GET请求时遇到问题。有趣的是,我们已经在IE8 / 9/10中使用它而不是11。

问题是IE 11似乎超时而不是等待服务器的响应。 ajax调用很简单:

$.ajax(url, {
    dataType: 'json',
    complete: complete,
    type: 'GET',
    global: true,
    success: success,
    crossDomain: true,
    xhrFields: {
        withCredentials: true
    }
});

在网络选项卡中并使用Fiddler我可以看到IE甚至从未发送请求。

有人有任何想法吗?

编辑:我忘了提到我已经尝试过cache:false。我还发现了一些非常奇怪的事情,如果我将开发工具中的文档模式从Edge切换到9然后再次调用,即使在我清除IE并重新启动它之后,无论缓存是真还是假,调用都会有效。非常离奇。 :\

5 个答案:

答案 0 :(得分:32)

IE以缓存而闻名。确保您没有获得缓存响应。您可以将cache属性值设置为false,也可以为网址添加唯一的时间戳,以便它不会是缓存的响应。您可以使用$.now()方法获取唯一的时间戳。

设置缓存属性

$.ajax(url, {
    dataType: 'json',
    cache : false,
    //Other things ...
}

向网址添加唯一时间戳

var url="somePage.php?"+$.now();
//Use this url now for making the ajax call

$.now()方法是表达式(new Date).getTime()

返回的数字的简写

答案 1 :(得分:5)

我不确定,也许是缓存,尝试设置属性“cache:false”

否则,您也可以尝试在网址末尾添加日期时间,这样每次都有不同的网址,IE就不会缓存

url +""+ (new Date()).getTime()

答案 2 :(得分:3)

在头部标签中使用

<meta http-equiv="X-UA-Compatible" content="IE=9,chrome=1">

答案 3 :(得分:2)

如果您正在运行本地,请尝试将crossDomain切换为false。我花了很多时间坚持下去。 Chrome处理了crossDomain,但是在IE中,如果你没有使用crossDomain并且你将它设置为true,它将无声地失败。

答案 4 :(得分:2)

我知道这个帖子已经过时了,但是对于那些遇到此问题的人来说,请检查您的“受信任的站点区域”设置是否允许跨域访问。 &#34;杂项&#34;下的第一个设置;是你想要的设置。

设置&#34;跨域访问数据源&#34;到&#34;启用&#34;。