$ .get在使用CORS标头时无法在IE中工作

时间:2013-06-02 08:59:51

标签: jquery internet-explorer cors

我从Forefox中的vbox Windows XP安装转到jquery $.get documentation。然后按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 documentation page,按F12,转到脚本标签并执行相同的代码:

  

错误:没有运输

2 个答案:

答案 0 :(得分: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,上面问题中的示例应该可以正常工作。

答案 1 :(得分:1)

供将来参考;我解决了它jQuery $.AJAX does not support CORS,你必须编写自己的传输来支持它。 (然后链接到死链接)

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

两年前,有人认为这是一个错误然后被忽略,这是submitted to the jQuery team。即使执行cors头应该由xhr请求支持,他们决定不这样做。

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

  

必须同意@anonymous:jQuery适用于各种各样的   浏览器的不一致性,可能大约是其目的的一半(   另一半正在简化复杂的操作)。这是经典之作   浏览器不一致:Chrome和Firefox支持CORS通过   XMLHttpRequest的; IE改为使用XDomainRequest。它没有任何意义   因为这是一个插件而不是(比如说)处理IE的破坏   getAttribute函数是一个插件。建议重新开放和   调度1.6.1或1.6.2(尤其是jQuery现在有jqXHR   概念)。