我正在使用角js $ http服务的雅虎获取请求到雅虎财务休息api但是我得到http状态码405作为回应。
下面是完整的堆栈跟踪。
index.html#/tab/stock:1 XMLHttpRequest cannot load http://finance.yahoo.com/webservice/v1/symbols/SUZLON.NS/quote?format=json&view=detail.
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin'
header is present on the requested resource.
Origin 'http://localhost:8080' is therefore not allowed access.
The response had HTTP status code 405.
以下是我的代码,使ajax调用。
var config = {
headers : {
'Access-Control-Allow-Origin' : '*',
'Accept' : 'application/json;odata=verbose',
"HOST" : "finance.yahoo.com"
}
};
var promise = null;
promise = $http.get('http://finance.yahoo.com/webservice/v1/symbols/SUZLON.NS/quote?format=json&view=detail',config);
return promise;
我能够使ajax调用谷歌金融API,但雅虎金融API失败。
我需要为我的配置对象设置任何标题吗? 或者雅虎Rest API端返回Http 405有什么不同?
下面的代码谷歌API调用工作正常,无需设置任何标题。
getNseQuote : function(nseScriptCode) {
console.log("Inside nseScriptCode : " + nseScriptCode);
var promise = null;
promise = $http.get('http://www.google.com/finance/info?q=NSE:' + encodeURIComponent(nseScriptCode));
return promise;
}
错误消息很清楚地解释了什么是错的。研究CORS和/或相同的原产地政策。 TLDR:你不能用你的客户端JavaScript解决这个问题,并在配置客户端设置这些头文件是没有意义的。 –
它说:“预检响应中的Access-Control-Allow-Headers不允许请求标头字段Access-Control-Allow-Origin。” “Origin'http:// localhost:8080'因此不被允许访问”我可以理解,我本地主机:8080不允许的来源。如果我从finance.yahoo运行这将工作。那么这是否意味着这个剩余的api只能用于内部使用? –
任何解决这个问题的方法都是通过在它周围添加一些包装来完成的。 –