我有一个带有文件名的数组,我需要使用ajax请求检索所有这些文件并等待它们完成初始化我的模板。
$.when(req[0],req[1],req[2],req[3],req[4],req[5],req[6],req[7]).done(function(){
for (var i in arr)
Stencil.push(new Platform(importedData[i].cells[0]));
$(".se-pre-con").fadeOut("slow");;
})
你可以看到我修正了等待请求的号码,这没有用。我怎么能动态地等待所有的请求,请求的数量是我的数组的长度。
答案 0 :(得分:2)
您可以将when
应用于这样的数组:
$.when.apply($, req).done(function(){
for (var i in arr)
Stencil.push(new Platform(importedData[i].cells[0]));
$(".se-pre-con").fadeOut("slow");
});
数组必须用jQuery promises填充,所以最好使用处理一个文件的函数的结果并返回一个promise并将它们存储在数组中。
如果您可以提供有关您对文件执行操作的详细信息,我将更新示例以匹配。
这是一个模拟asyc文件处理的小样本(使用计时器):
JSFiddle: http://jsfiddle.net/TrueBlueAussie/79bp8yw1/
var files = ["file1", "file2", "file3", "file4"];
var req = [];
for (var i = 0; i < files.length; i++){
req.push(processFile(files[i]));
}
$.when.apply($, req).done(function(){
$('#body').append("All done");
});
并且虚拟文件处理函数返回一个promise:
var time = 1000;
function processFile(filename){
var def = $.Deferred();
setTimeout( function(){
$('body').append("File " + filename + "<br/>");
def.resolve();
}, time);
time += 1000;
return def.promise();
}
答案 1 :(得分:0)
您可以使用从这些AJAX调用返回的所有promise来填充数组,然后将其应用于$.when
。试试这个:
$.when.apply($, req).done(function() {
// your logic here...
});