我想动态生成ajax请求,但是我想确保在完成所有请求后得到回调,所以我想将它们包含在.when .done语句中,如下所示:
$.when(function(){
$.each(oOptions, function(){
var filePath = this.filePath,
dataType = this.dataType;
$.ajax({
url : filePath,
dataType : dataType
});
});
})
.done(function(){
console.log('success');
console.log(arguments);
})
.fail(function(){
console.log('failed');
});
其中我的选项是一个对象数组,其中包含我想要同时生成的每个ajax请求的文件路径和数据类型。这段代码将返回成功,但参数只是一个函数,而ajax请求永远不会通过。关于如何做到这一点的任何想法?
答案 0 :(得分:1)
您是否必须将“完成”逻辑作为成功函数放入$ .ajax调用参数中?我的意思是这样的:
$.ajax({
url : filePath,
dataType : dataType,
success: function(){
console.log('success');
}
});
由于ajax调用是异步调用的,因此可以在完成ajax调用之前调用done()...
答案 1 :(得分:1)
您将函数传递给$.when
,而您应传递一个或多个Deferred
。您可以使用延迟填充数组并将其作为参数传递给$.when
:
var deferreds = [];
$.each(oOptions, function() {
var filePath = this.filePath,
dataType = this.dataType;
deferreds.push($.ajax({
url : filePath,
dataType : dataType
}));
});
// use the array elements as arguments using apply
$.when.apply($, deferreds)
.done(function(){
console.log('success');
console.log(arguments);
})
.fail(function(){
console.log('failed');
});