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