[英]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.