Jquery $。使用CORS标头时,无法在IE中工作

Jquery $。使用CORS标头时,无法在IE中工作,jquery,internet-explorer,cors,Jquery,Internet Explorer,Cors,我从Forefox中的vbox Windows XP安装转到。然后按下firebug控制台的F12键并粘贴以下代码以运行: $.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('Acc

我从Forefox中的vbox Windows XP安装转到。然后按下firebug控制台的F12键并粘贴以下代码以运行:

$.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时,请转到,按F12,转到脚本标记并执行与我得到的代码相同的代码:

错误:没有传输


供日后参考;我解决了这个问题,您必须编写自己的传输来支持它。(然后链接到死链接)

这是因为jQuery在可用时使用XMLHttpRequest对象,但IE 8和9 XMLHttpRequest不支持CORS头,需要XDomainRequest。我认为这是jQuery中的一个bug。 两年前,有人认为这也是一个bug,但后来被忽略了。尽管实现cors头应该得到xhr请求的支持,但他们决定不支持

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

必须同意@anonymous:jQuery可以处理各种各样的问题 浏览器不一致,这可能是其目的的一半( 另一半是简化复杂的操作)。这是一部经典之作 浏览器不一致:Chrome和Firefox通过 XMLHttpRequest;IE改为使用XDomainRequest。这毫无意义 这是一个插件,而不是处理IE坏了 getAttribute函数是一个插件。建议重新开放 1.6.1或1.6.2的调度(特别是jQuery现在有了jqXHR) 概念)


我相信jQuery选择不支持IE8/9XDOMainRequest的原因是在这些浏览器上不可能完全支持CORS。例如,不能使用XDomainRequest发送自定义头,请求类型始终为text/plain

对于许多应用程序,这些限制并不重要。我发现,包括这个库,我不仅可以用jQuery支持IE 8/9上的CORS,还可以用AngularJS和其他框架支持CORS:


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

可能重复感谢!(这是我的评论。听起来很熟悉,然后我突然意识到……:-)很有趣。我必须同意关于bug线程的观点。如果IE中的XDR非常脆弱,而且本身就存在很多问题,那么jQuery是否明智地尝试使用它,为本机XDR问题/故障负责?在这种情况下,使用单独的插件而不是将其作为jQuery核心的一部分是否更有意义?鉴于上述问题的性质,这听起来确实有风险。是的,我读了更多的书,似乎IE8和IE9中的cors实现太弱,不值得认真对待。因此,如果你想支持IE 7和8浏览器,最好还是坚持使用JSONP。在某些情况下,你可以不受有限的支持,但是当设置InPrivate browsing时,IE 8的评论完全崩溃了,这让我很担心。不过,文档中的警告还是不错的。对于任何使用CORS的人来说,如果他们计划支持IE 9和以下,就应该重新考虑。