我正在尝试进行多个异步Ajax调用,并希望在所有ajax调用完成后执行某些操作。所以我试图使用jquery promise功能,但似乎它在ajax调用成功之前调用$ .done函数。
以下是我的代码:
pool = {a: 1, b: 2};
for(var camp in pool){
promises.push(parseFile(camp));
}
$.when.apply($, promises).done(function() {
console.log("All jobs finished");
});
function parseFile(fname)
{
console.log(fname +" call");
$.ajax({
url: "data/" + fname + ".txt",
dataType: "text"
})
.done(function(data) {
console.log(fname + " done");
});
}
控制台日志:
一个电话
b呼叫
所有工作都已完成 //我们应该在结束时被打电话
完成了
b完成了
答案 0 :(得分:2)
parseFile
需要返回一个承诺,否则该方法返回的值将是未定义的,将被视为$.when()
作为已解析的值。
function parseFile(fname) {
console.log(fname);
//return the ajax promise here
return $.ajax({
url: "data/" + fname + ".txt",
dataType: "text"
})
.done(function (data) {
console.log(fname + " done");
});
}