我想等待所有回调函数完成,然后返回最终结果,如下所示:
var jsonArray = new Array();
for(var i = 0; i < 10; i++)
{
jQueryFunction(i, function(json){
jsonArray[i] = json;
});
}
return jsonArray;
jQueryFunction是一个包含异步ajax和回调的函数,返回一个名为json的值。我想等待for循环完成然后将所有返回值放入jsonArray,最后返回它。
我的目标是等待所有jQueryFunction回调完成并将其返回存储到jsonArray中,然后在最后返回jsonArray。我之前的目标不起作用,因为它立即返回jsonArray并且不等待for循环
我试过这样:
function jQueryFunction(ptd_url, callback)
{
$.ajax
({
type: "GET",
async: true,
url: ptd_url,
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "tpsHandler",
success: function(json)
{
return callback(json);
}
});
}
function finalResultFunction()
{
var jsonArray = new Array();
for(var i = 0; i < 10; i++)
{
jQueryFunction(1, function(json){
jsonArray[i] = json;
alert(jsonArray[i]);
});
}
$.when.apply($, jsonArray).done(function(){
alert(jsonArray[0]);
...
}
setInterval(finalResultFunction,1000);
第一个警告显示正确的对象,但第二个警告仍然显示为null。为什么?怎么解决?
答案 0 :(得分:2)
您可以使用jquery的when
等待多个请求。您只需jQueryFunction
即可返回jqXHR
。
function jQueryFunction(){
return $.ajax( /* ... */ );
}
var requests = [];
for(var i = 0; i < 10; i++)
{
var xhr = jQueryFunction( /* ... */ );
requests.push(xhr);
}
$.when.apply($, requests).done(function(){
// EVERYTHING IS NOW DONE, DO SOMETHING HERE
});