function hello() {
var arr = [];
$.get(url, function (data) {
var items = $(data).find("item");
$(items).each(function (idx, item) {
arr.push(item);
});
});
return arr; //undefined because nested loops are not finished processing.
}
如何在返回之前确保填充arr
?
答案 0 :(得分:1)
无法逃避异步调用。您需要回调才能获得GET
调用的结果。
function asynCall() {
var response;
// Ajax call will update response here later.
return response;
}
var responseFromFun = asyncCall(); // This will be undefined or null.
这就是您的代码现在的工作方式。因此,响应始终为undefined
或null
。
要从Ajax调用获取响应,请在调用函数时调用该函数,而不是为其分配响应。
function asyncCall(callBack) {
var response;
$.get(...) {
response = someValueReturnedFromServer;
callBack(response);
}
// There wont be a return here
}
asyncCall(function(response){
// Do something with response now
});
这里的缺点是,如果您将arr
对象(在您的代码中)传递给其他函数,即使必须更改为使用回调!