繁体   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