【发布时间】: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