我正在使用角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只能用於內部使用? –
任何解決這個問題的方法都是通過在它周圍添加一些包裝來完成的。 –