这是我的代码:
var url = "http://www.google.com/finance?q=MSFT"
$http.get(url).success(function (data, status, headers, config) {
alert('successful');
}).error(function (data, status, headers, config) {
alert('failed');
});
这很好用。但是,如果我按如下方式将URL更改为Yahoo或Reuters,则总是会返回404错误。
url = "http://finance.yahoo.com/q/pr?s=MSFT";
url = "http://www.reuters.com/finance/stocks/companyProfile?rpc=66&symbol=MSFT"
当您进入Chrome时,这些都是有效的网址。
我理解在stackoverflow上有关于$http.get
的相关问题,但我尝试了一些建议,但仍无法使其发挥作用。我很好奇为什么同样的请求适用于谷歌,但不适用于雅虎和路透社?
更新1: 正如一些人所说,它可能是一个CROSS-ORIGIN问题,所以我将以下代码从here添加到我的项目中:
app.config(['$httpProvider', function ($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}]);
然而,它没有帮助。
我查看了Chrome中的网络流量日志,请求状态为(已取消)。有什么线索的原因?
更新2: 实际上,我忽略了Chrome控制台中的错误消息。它显示:
XMLHttpRequest cannot load http://finance.yahoo.com/q?s=MSFT. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1486' is therefore not allowed access.
所以,它似乎确实是一个跨源问题。但是,UPDATE 1代码似乎对此没有任何影响。我做错了什么?另外,为什么它没有抱怨谷歌?
答案 0 :(得分:1)
这听起来像是跨源请求问题。
有类似问题的人找到了一种方法来处理带角度的跨域请求:AngularJS 1.2 cross origin requests are only supported for HTTP
可能是一个更相关的主题:$http.get is not allowed by Access-Control-Allow-Origin but $.ajax is