簡體   English   中英

JSON使用JQuery獲取請求(跨域)

[英]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響應不應該直接回調嗎?

什么是JSONP?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM