在Angular和IE8中使用$ http请求拒绝访问

时间:2013-04-11 23:08:16

标签: javascript node.js internet-explorer-8 angularjs

我正在尝试让我的角应用程序执行$ ​​http.get请求。 IE8无处不在。我正在使用最新的Angular(我认为是1.0.6)。 IE提供的唯一消息是:TypeError:

访问被拒绝。    undefined(以前的角度是这个)

我的主机(nodejs)设置为发送cors标头:

res.header('Access-Control-Allow-Origin', '*'); //config.allowedDomains
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, X-Requested-By');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');

我尝试使用调试工具获取有关错误的更多信息,但是:

Fiddler:没有显示xmlhttprequests - 似乎你可以破解你的NET应用程序来修复它但不知道如何处理我的网页。 DebugBar:也不显示这些请求 FirebugLite:我试过的2个版本坏了 - 只是随机错误而且没有加载

将主机更改为同一个来源可以解决问题,因此我认为它正在尝试某些功能,但是很难调试。

对此的角色帖子似乎过时了,我不知道该怎么做。

3 个答案:

答案 0 :(得分:7)

这与$ http无关。 $ http允许您进行XHR(XDR)或JSONP请求。它没有提供规避浏览器相同原始策略的机制。

  

将主机更改为同一个来源可以解决问题,因此我认为它正在尝试某些功能,但是很难调试。

这是你问题的关键。 IE8不支持跨源资源共享(CORS)。为了使用IE8进行跨域调用,最好是:

  1. 使用您的nodejs应用程序代理您的请求,让您使用相同的域。
  2. 在$ http.get()请求中使用JSONP
  3. 有许多与CORS和IE8相关的陷阱,outlined here

答案 1 :(得分:3)

我遇到了同样的问题,虽然它可能不太理想,但一种解决方案是将IE的“跨域访问数据源”安全设置更改为启用提示

http://technet.microsoft.com/en-us/library/dd346862.aspx

在我的情况下,当我尝试从另一个域上托管的自己的API获取数据(通过angular的$ resource)时,我遇到了同样的事情。在IE8& IE9这些请求会因上述错误而失败。更改IE中的安全设置以允许跨域数据请求解决了该问题。

答案 2 :(得分:1)

AngularJS不支持IE< = 9 CORS。

根据需要,有一个链接到github官方AngualrJS网站:

AngularJS Github official discussion