[英]JSON Get request using JQuery (cross-domain)
我正在嘗試向我無法控制的域上的API發出簡單的JSON get請求。
我的代碼很簡單:
$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'http://pubapi.cryptsy.com/api.php?method=marketdatav2',
success: function (data) {
console.log(data);
}
});
});
但由於這是一個跨域請求,我在Chrome控制台中收到此錯誤:
XMLHttpRequest cannot load http://pubapi.cryptsy.com/api.php?method=marketdatav2. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://fiddle.jshell.net' is therefore not allowed access.
當我嘗試添加參數dataType: 'jsonp'
,Console返回此錯誤:
未捕獲的SyntaxError:意外的令牌:
但是當我檢查Chrome中的Network選項卡時,我看到在Headers下,Status Code為200 OK,我可以在Response選項卡中看到完整的響應,但是控制台仍然顯示“Unexpected Token:”錯誤和JQuery JSON請求仍然失敗。
這是JS Fiddle鏈接: http : //jsfiddle.net/6Qcq2/您可以看到相同的結果
我試過在http://www.hurl.it上運行網址,它顯示狀態OK和響應,所以我一定做錯了。
我整天都在試圖弄清楚如何解決這個問題。
非常感激你的幫助。
API的響應是JSON,而不是JSONP,因此僅更改數據類型無濟於事。
您可以使用發出請求的代理並將JSON轉換為JSONP:
$(document).ready(function () {
$.ajax({
type: 'GET',
url: 'http://jsonp.guffa.com/Proxy.ashx?url=pubapi.cryptsy.com%2fapi.php%3fmethod=marketdatav2',
dataType: 'jsonp',
success: function (data) {
console.log(data);
}
});
});
演示: http : //jsfiddle.net/6Qcq2/1/
您需要設置某種類型的代理腳本。 由於Same-origin策略 ,您無法對外部域上的資源進行ajax調用。 您可以通過設置一個簡單的PHP腳本來解決這個問題,該腳本將為您查詢數據。 然后,您可以將ajax調用指向您的腳本(將在您的域上托管)。 該資源的內容類型是application / json,因此告訴jQuery類型是jsonp對你沒有幫助。
出於安全原因,AJAX請求不能跨域工作。 由於您正在閱讀JSON數據,因此您可以使JSONP工作。
jsonp響應不應該直接回調嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.