在任何低于10的IE版本中,XMLHttpRequest访问被AngularJS拒绝

在任何10以前版本的Microsoft IE浏览器上查看我的应用程序时,在控制台中出现以下奇怪的错误:

从开发者控制台的控制台屏幕截图,视图不会得到解决由于这个错误

我已经尝试在AngularJS库之前添加以下JavaScript代码来取消控制台:

console.log = function(){}; window.console = {log: function(){}}; 

这没有什么区别。 在IE 10中出现同样的错误:

 SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied. 

可能我试图从API获取“/我”,以检查用户是否通过身份validation或访客。

基本上。 消除那些恼人的控制台错误,每次服务器给出的响应以外的2XX或3XX将是伟大的!

更新:这似乎与通过不同的子域(CORS)访问API有关;

我通过在Google AngularJS团队中经验丰富的ng-dev的指导,已经能够实现的解决scheme就是这个xDomain库 。

设置非常简单,只需在你的API的根目录下放置一个proxy.html文件,一个允许的来源('master')的正则expression式/string和前端脚本的引用,然后指向这个文件从您的前端脚本('主')。

它通过在iframe中打开proxy.html文件并使用postMessage与CORS资源进行通信来工作。

像$ http和$资源一样具有魅力。

您还可以通过将脚本放在所有JavaScript库之上来保持正常浏览器的正常运行:

 <!--[if lte IE 9]> <script src="xdomain.js" slave="http://example.org/proxy.html"></script> <![endif]--> 

当然你的问题是CORS相关的。 IE10使用真正的XmlHttpRequest,但在此之前,IE没有。 到目前为止,我发现解决这些types问题的最简单方法是使用apache或nginx来代理API。 例如,用nginx,在你的服务器{}块中:

 location /api { proxy_pass http://my.server.name:12345/v1; proxy_redirect off; } 

请注意,即使jQuery完全不支持XDomainRequest和CORS,您也必须添加一个插件来获取XDR。 另外请注意,XDR对CORS有一些严格的限制。

在我的情况下, Response Headers包含

Content-Type:application/json; charset=UTF-8

这是IE9的一个问题,因为它不能正确处理/parsingJSON对象的响应。

Response Headers转换为

Content-Type:text/plain; charset=UTF-8

另外,请确保为IE9提供以下模块: https : //stackoverflow.com/a/28905072/1202371

允许接收文本中的响应,然后将其转换为JSON对象。