IE 11出现奇怪的AJAX错误

Strange AJAX bug with IE 11

本文关键字:AJAX 错误 11出 IE      更新时间:2023-10-12

我目前正在开发一款纯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甚至从未发送请求。

有人有什么想法吗?

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

IE以缓存著称。请确保您没有得到缓存的响应。您可以将cache属性值设置为false,也可以向url添加唯一的时间戳,使其不会是缓存响应。您可以使用$.now()方法来获取唯一的时间戳。

设置缓存属性

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

向URL添加唯一的时间戳

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

$.now()方法是表达式(new Date).getTime() 返回的数字的简写

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

否则,你也可以尝试在你的url末尾添加一个日期时间,这样你每次都有一个不同的url,IE不会缓存

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

在头内标签中使用此标签

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

如果您正在运行本地,请尝试将crossDomain切换为false。我花了很多时间在这上面。Chrome处理了crossDomain,但在IE中,如果你没有使用crossDomain,并且你将其设置为true,它将自动失败。

我知道这个线程很旧,但作为对遇到这个问题的人的额外检查,请检查您的受信任站点区域设置是否允许跨域访问。"杂项"下的第一个设置是您想要的设置。

将"跨域访问数据源"设置为"启用"。