2013-11-26 44 views
23

我目前正在研究一个纯粹的HTML和JavaScript驱动的Web应用程序,它使用CORS消耗远程Web服务,但目前在IE 11发出GET请求时遇到问题。有趣的是,我们已经在IE8/9/10中正常工作,而不仅仅是11.奇怪的AJAX错误与IE 11

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

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

在网络选项卡,并使用招我可以看到IE从来没有发送请求。

有没有人有任何想法吗?

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

+0

你能否看到IE11是否存在飞行前OPTIONS请求的问题?你可以在服务器上记录OPTIONS请求吗? – Halcyon

+0

通过检查ajax的哪个选项给你的问题进行调试 –

+0

我不知道这是否仍然是一个问题,但你有没有检查你的IE [安全区](http:// stackoverflow。com/questions/3362474/jquery-ajax-fails-in-ie-on-cross-domain-calls)允许CORS? – rockerest

回答

29

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()

+0

谢谢您的回复。我尝试添加时间戳,但没有区别。 – Daveo

+0

@Daveo:你是否收到任何脚本错误?使用萤火虫看看会发生什么 – Shyju

+0

''.now()'之前应该有一个问号,否则网址会中断。 – qwerty

5

我不知道,也许它的缓存,尝试设置属性“缓存:假”

否则,你也可以尝试在您的网址的末尾添加一个日期,所以你必须每次一不同的网址和IE不会缓存

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

如果您正在运行本地,请尝试将crossDomain切换为false。我花了相当多的时间来坚持这一点。 Chrome处理了crossDomain,但在IE中,如果您未使用crossDomain,并且已将其设置为true,则它将自动失败。

3

使用这个在你的头标记

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

我知道这个线程是旧的,但只是为那些遇到此问题的额外的检查,检查您的可信站点区域设置允许跨域访问。 “杂项”下的第一个设置是您想要的设置。

将“跨数据源访问数据源”设置为“启用”。