我有以下回调:
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请求返回的数据。我不太熟悉回调,所以请耐心等待,因为我还在努力与他们握手。
答案 0 :(得分:1)
执行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
,即使在外部范围内也是如此。这相当于从message
的参数中删除getDataCallback
。