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

我试图让我的angular应用程序做一个$ http.get请求。 无处不在,但IE8。 我正在使用最新的Angular(1.0.6我认为)。 IE给出的唯一消息是:TypeError:

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

我的主机(nodejs)被设置为发送头信头:

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'); 

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

提琴手:不显示xmlhttprequests – 似乎你可以破解你的NET应用程序来解决,但不知道如何处理我的网页。 DebugBar:不显示这些请求要么FirebugLite:2我试过的版本都坏了 – 只是随机错误,不加载

将主机更改为相同的来源会清除问题,所以我假设它正在尝试一些东西,但是很难debugging。

在这个angular度的post似乎过时了,我不知道从这里做什么。

这与$ http无关。 $ http可以让你制作XHR(XDR)或JSONP请求。 它没有提供规避浏览器相同来源策略的机制。

将主机更改为相同的来源会清除问题,所以我假设它正在尝试一些东西,但是很难debugging。

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

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

有几个与CORS和IE8相关的陷阱, 这里概述 。

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

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

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

AngularJS不支持IE <= 9的CORS。

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

AngularJS Github官方讨论