5

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

我在构建一个我不关心响应并且未指定 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 或将缓存设置为 false(在 AJAX 请求中)。

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

4

3 回答 3

1

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

通过强加JSONP,您可以强制服务器有一个非常具体的答案(包括方法调用)。

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

于 2012-08-21T15:55:28.087 回答
0

如果您在不重新加载页面的情况下执行跨域 ajax 调用来处理表单帖子,则将数据类型设置为“脚本”对我有用。

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

@dystroy 即使在放入标头之后,也允许 FF 工作,但在我使用脚本数据类型之前并没有在 IE9 中产生差异

于 2012-11-06T18:41:31.413 回答
-2

您不必为此编写长脚本。只需简单地在下面添加这段代码,看看它的神奇之处。

$(document).ready(function(){
jQuery.support.cors = true;
// call your other functions below.....
})
于 2013-06-24T10:21:20.567 回答