【问题标题】:Why Angular $http.get() from Yahoo returns 404?为什么来自 Yahoo 的 Angular $http.get() 返回 404?
【发布时间】:2015-05-12 01:18:50
【问题描述】:

这是我的代码:

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 时,这些都是有效的 URL。

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

【问题讨论】:

  • 您是否有Access-Control-Allow-Origin 错误?
  • 错误回调中的数据为空字符串。
  • 我告诉过你,这正是Access-Control-Allow-Origin。这是因为两个网站都不允许跨域请求。您可以使用 --disable-web-security 标志绕过这个正在运行的 Chrome。 Firefox 应该可以正常工作。
  • 好的,我现在知道了。谢谢。但是,我还是不明白为什么访问谷歌网站没有问题?
  • 因为他们可能设置了类似于 `header('Access-Control-Allow-Origin: *');` 的东西,它允许任何来源。

标签: javascript angularjs http


【解决方案1】:

这听起来像是一个跨域请求问题。

有类似问题的人在这里找到了一种使用 Angular 进行跨域请求的方法:AngularJS 1.2 cross origin requests are only supported for HTTP

这里可能还有一个更相关的话题:$http.get is not allowed by Access-Control-Allow-Origin but $.ajax is

【讨论】:

  • 感谢您的快速回复。我试图删除“X-Requested-With”,但没有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 2014-07-19
相关资源
最近更新 更多