1

我从 Forefox 中的 vbox Windows XP 安装中转到jquery $.get 文档。然后按 F12 进入 firebug 控制台并粘贴以下代码运行:

$.get("http://10.0.2.2/info.php"
 ,null,function(data){console.log(data);}
).fail(function(e){console.log("ERROR:"+e.statusText);})

10.0.2.2/info.php 指向我电脑上的以下 php 文件:

<?php
header('Access-Control-Allow-Origin: *');
echo "howdie";
?>

这在 Firefox 中可以正常工作并显示“howdie”。但是,当打开 IE 8 时,转到$.get 文档页面,按 F12,转到脚本标签并执行我得到的相同代码:

错误:没有运输

4

2 回答 2

2

我相信 jQuery 选择不支持 IE 8/9 XDomainRequest 的原因是这些浏览器无法完全支持 CORS。例如,您不能使用 XDomainRequest 发送自定义标头,并且请求类型始终是 text/plain。

对于许多应用程序,这些限制无关紧要。我发现包含这个库可以让我在 IE 8/9 上支持 CORS,不仅可以使用 jQuery,还可以使用 AngularJS 和其他框架:

https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js

如果您首先包含 xhr-xdr-adapter,则上述问题中的示例应该可以正常工作。

于 2014-08-15T23:00:59.280 回答
1

备查; 我解决了它,因为jQuery $.AJAX 不支持 CORS,你必须编写自己的传输来支持它。(然后链接到死链接)

这是因为 jQuery 在可用时使用 XMLHttpRequest 对象,但 IE 8 和 9 XMLHttpRequest 不支持 CORS 标头并且需要 XDomainRequest。我认为这是 jQuery 中的一个错误。

两年前,有人将它提交给 jQuery 团队,他们也认为这是一个错误,然后被忽略了。即使 xhr 请求应该支持实现 cors 标头,但他们决定不支持。

我完全同意 jQuery 页面上发布的以下评论:

必须同意@anonymous:jQuery 可以解决各种各样的浏览器不一致问题,这可能是它的一半目的(另一半是简化复杂的操作)。这是一个经典的浏览器不一致:Chrome 和 Firefox 通过 XMLHttpRequest 支持 CORS;IE 改为使用 XDomainRequest。将其作为一个插件比(例如)将 IE 的损坏的 getAttribute 函数作为一个插件处理没有意义。建议重新打开和调度 1.6.1 或 1.6.2(尤其是 jQuery 现在有 jqXHR 概念)。

于 2013-06-02T09:01:33.713 回答