为什么来自Yahoo的Angular $ http.get()返回404?

时间:2014-07-07 15:15:01

标签: javascript angularjs http

这是我的代码:

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代码似乎对此没有任何影响。我做错了什么?另外,为什么它没有抱怨谷歌?

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