我从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,转到脚本标签并执行相同的代码:
错误:没有运输
答案 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 概念)。