簡體   English   中英

使用jQuery使用JSONP在跨域上獲取JSON

[英]Getting json on cross domain with jsonp using jquery

我有一個非常簡單的$ .ajax調用,該調用假定是從給定的URL獲取json數據。 當前,URL確實會被調用,並且數據確實會返回,但是localHsonpCallback函數似乎沒有被觸發。

這是我的代碼。

function getBuildings(){
    $.ajax({
        url: 'http://localhost/api/users',
        type: "GET",
        dataType: "jsonp",
        jsonpCallback: "localJsonpCallback"
    });
}

function localJsonpCallback(json) {
console.log("Fired");
    if (!json.Error) {
        console.log("Fired");
    }
    else {
        console.log("ERROR");
    }
}

因此,如上所述,出於某種原因,localJsonpCallback似乎根本沒有被解雇。

另外我應該提到,在我的Chrome開發工具中,請求鏈接最終看起來像這樣

http://localhost/api/users?callback=localJsonpCallback&_=1429708885454

在這個問題上的任何幫助將不勝感激。

謝謝。

直接在參數列表中嘗試將回調方法作為匿名函數使用。

function getBuildings(){
    $.ajax({
        url: 'http://localhost/api/users',
        type: "GET",
        dataType: "jsonp",
        jsonpCallback: function(data){
            console.log("Fired");
            if (!data.Error) {
                console.log("Fired");
            }
            else {
                 console.log("ERROR");
            }
        }
    });
}

如果您沒有將回調附加到url上,則可以將jsonp oprion設置為false,然后在執行操作時,在選項中設置回調。

function getBuildings(){
    $.ajax({
        url: 'http://localhost/api/users',
        type: "GET",
        dataType: "jsonp",
        jsonp: false,
        jsonpCallback: "localJsonpCallback"
    });
}

由於javascript是順序的,因此在調用函數之前定義它們也是一個好主意。 即-在ajax調用之前定義回調函數。

http://api.jquery.com/jQuery.ajax/

jsonp

類型:
字符串覆蓋JSONP請求中的回調函數名稱。 這個值將被用來代替'callback''callback=?' 網址中查詢字符串的一部分。 因此{jsonp:'onJSONPLoad'}將導致'onJSONPLoad=?' 傳遞給服務器。 從jQuery 1.5開始,將jsonp選項設置為false可防止jQuery將"?callback"字符串添加到URL或嘗試使用"=?" 進行轉化。 在這種情況下,您還應該顯式設置jsonpCallback設置。 例如, { jsonp: false, jsonpCallback: "callbackName" }

也許這段代碼將有助於解決您的問題:

$.ajax({
      type: 'GET',   
      url: 'http://localhost/api/users',
      data:{todo:"jsonp"},
      dataType: "jsonp",
      crossDomain: true,         
      cache:false,
      success: success,
      error:function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
      }
 });

 var success = function(data){            
        /* parse JSON */
        data = $.parseJSON(data);
        //your code here
 };

這是服務器端的問題,即回調參數未正確使用,或者它們正在尋找不同的服務器端的參數名稱callback不存在。

您說結果正在返回,格式是什么? JSONP必須返回不是純數據的腳本塊,因此請確保結果采用以下格式。

{callbackFunctionName}({hugeDataFromServer});

基本上是腳本調用您的函數。

如果不是服務器端,則意味着它們更有可能使用其他名稱作為callback參數,例如cb_callback

暫無
暫無

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

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