使用IE9进行跨域AJAX请求

时间:2012-08-21 15:50:34

标签: jquery ajax internet-explorer jsonp

除非请求dataType设置为“jsonp”或“script”,否则不会在IE9中执行跨域AJAX请求(使用jQuery 1.7.2创建)。

我在构建请求时发现了这个问题,我不关心响应,并且未指定dataType(是的,我知道我应该关心响应)。

因此,例如,这将起作用:

$.ajax({
    url: "http://www.google.com",
    type: "GET", // or "POST"
    dataType: 'jsonp'
});

但这不会:

$.ajax({
    url: "http://www.google.com",
    type: "GET" // or "POST"
});

“工作”是指我在Firebug或F12中看到HTTP请求。

这两个请求都适用于其他浏览器。设置jQuery.support.cors = true;不会影响成功,也不会将crossDomain设置为true,也不会将cache设置为false(在AJAX请求中)。

为什么AJAX请求的成功取决于IE中请求的dataType?我能理解为什么它会影响我处理任何返回数据的能力;我也理解一些服务器可能会拒绝某个dataType的所有请求(但这显然不是这种情况)。

3 个答案:

答案 0 :(得分:1)

这不是数据类型的问题,而是在浏览器中清楚地验证服务器是否真的想要回答此查询。

强制JSONP强制服务器有一个非常具体的答案(包括方法调用)。

请注意,现在有其他解决方案:您可以在服务器上设置特定标头(请参阅https://developer.mozilla.org/en-US/docs/HTTP_access_control

答案 1 :(得分:0)

如果您正在执行跨域ajax调用以处理表单帖子而不重新加载页面,则将数据类型设置为“script”对我有效。

我会对信息的可靠链接非常感兴趣,以了解更多信息。我把头发拉了几天不明白为什么除IE9之外的所有浏览器都在工作。

@dystroy甚至在放入标题之后,允许FF工作但在IE9中没有产生差异,直到我使用脚本数据类型

答案 2 :(得分:-2)

您不必为此编写长脚本。只需在下面添加此代码即可看到神奇的效果。

$(document).ready(function(){
jQuery.support.cors = true;
// call your other functions below.....
})