我想在jQuery中生成X个ajax请求,并将json响应添加到数组中。 当所有的ajax请求完成后,我想执行一些代码。有没有好办法解决这个问题?
答案 0 :(得分:2)
除了计算请求并在代码中手动计算它们之外,我不知道任何其他方法。一旦他们全部退回并计算,请执行主回调。
答案 1 :(得分:1)
这段代码应该做你想要的所有jQuery样式。基本上它使用一点递归来完成它。将选项传递给loadmultiples函数以设置您要执行的操作,并将JSON响应推送到数组。如果您想将JSON响应合并到一个结构中,您可以轻松地更改它,但我不确定这是否是您想要的。
var loadmultiples = function(options) {
var settings = $.extend({
//set the url to get
url : '/response.json',
//this function is called when everything is done
callback : function() {},
//set this option to define how many loads to do
numbertodo : 10,
//these two are just used for
//storing data while we recurse,
//and keeping track of the current position
//however you can change them if you want to start
//from a different point, or have existing data
numberdone : 0,
data : []
}, options || {});
//load the json, passing up the current 'number'
//of the content to load
$.ajax({
url : settings.url,
data : { 'number' : settings.numberdone },
dataType: 'json',
success: function(result) {
//add the response to the data
settings.data.push(result);
//increment the counter of how many files have been done
settings.numberdone++;
//
if(settings.numberdone < settings.numbertoexecute) {
loadmultiples(settings);
} else {
settings.callback(settings.data);
}
}
});
}
//so now we can call it...
loadmultiples({
callback: function(data) {
//this function will get called when all the data calls have been
//completed, and the resulting data is in the data parameter
}
});
答案 2 :(得分:0)
对于每个ajax响应,我会这样做:
for(var k in json) someArray[k]=json[k];
但我不确定你的json数据看起来如何。
答案 3 :(得分:0)
我最近通过解雇一堆ajax请求,然后在他们进来时递减计数器来做到这一点。
它工作正常,但我最终将我的代码从一堆小的ajax请求更改为只是一次向服务器询问所有内容。请求少得多,开销也少,而且更强大。
除非您有充分的理由提出个别请求(某些请求可能很快,有些请求很慢,并且您可以提供一些有意义的信息显示),我会把它们全部混在一起(假设您可以修改服务器代码或添加新的服务器代码。)