簡體   English   中英

jQuery-如何使用getjson調用回調

[英]jQuery - How to call a callback with getjson

我有以下回調:

var getData = function (callback) {

    var id = $("#Id").val();

    if (id.length === 0)
       return; 

   $.getJSON('api/data' + '?id=' + id)
    .done(function (data) {
        callback(data);
    }).fail(function (jqXHR, textStatus, err) {
        return;
    });

}

我試圖這樣稱呼它:

var id = 123;
getData(function () {
     //TO DO: check if id exist in data
     console.log(data);
});

但我得到reference error: data is not defined 我如何獲取ajax請求返回的數據。 我對回調不太熟悉,所以請耐心等待,因為我仍在嘗試與它們保持聯系。

當您執行callback(data) ,您只是在調用傳遞給getData的函數。 您在調用過程中傳遞了一個參數,這意味着傳遞的函數必須存在一個參數,以便您可以訪問它。 只需做:

getData(function (data) {
        console.log(data);
});

為了更好地了解什么是回調以及到底發生了什么,讓我們將其重寫為更簡單的形式。

function getData(callback) {

    var id = $("#Id").val();

    if (id.length === 0)
       return; 

   $.getJSON('api/data' + '?id=' + id)
    .done(function (data) {
        // 2. All that getData is doing is call that function using the
        //    reference you sent when it's done. Like any other function
        //    you can pass it arguments.
        getDataCallback(data);
    }).fail(function (jqXHR, textStatus, err) {
        return;
    });

}

function getDataCallback(message){
  // 3. Like any other function, to access the arguments passed, you need
  //    to name your arguments.
  console.log(message);
}

var id = 123;

// 1. All you are doing really is pass a reference to a function to getData
getData(getDataCallback);

代碼失敗的地方是console.log 它試圖訪問任何地方都沒有定義的data ,即使在外部作用域也是如此。 這等效於從getDataCallback的參數中刪除message

暫無
暫無

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

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