8

我正在尝试让我的 Angular 应用程序执行 $http.get 请求。适用于除 IE8 之外的任何地方。我正在使用最新的 Angular(我认为是 1.0.6)。IE 给出的唯一消息是:TypeError:

访问被拒绝。未定义(在以前的角度是)

我的主机(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 版本已损坏 - 只是随机错误并且不加载

将主机更改为相同的来源可以解决问题,所以我认为它正在尝试一些东西,但是很难调试。

关于这个的 Angular 帖子似乎已经过时了,我不知道从这里做什么。

4

3 回答 3

7

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

将主机更改为相同的来源可以解决问题,所以我认为它正在尝试一些东西,但是很难调试。

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

  1. 使用您的 nodejs 应用程序为您代理请求,让您使用相同的域。
  2. 在 $http.get() 请求中使用 JSONP

有许多与 CORS 和 IE8 相关的陷阱,在此处进行了概述

于 2013-04-12T00:08:40.230 回答
3

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

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

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

于 2013-06-02T13:30:32.917 回答
1

AngularJS 不支持 IE<=9 CORS。

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

AngularJS Github 官方讨论

于 2014-12-02T09:24:43.583 回答