我正在尝试了解有关Ajax调用的更多信息并进行一些测试。由于异步,我遇到了麻烦。在this website的帮助下,我发现了我认为应该起作用的东西。我已经摆弄了很多东西,但是仍然没有使事情按照我的喜好工作。
背景:
在array
中捕获可变数量的id
遍历$.ajax
调用以更新ID(无法进行api批处理请求)。
$(document).ready(function() {
$("#button").click(function() {
var deffered, deferreds = [];
$.each(arr, function(i, array) {
deferred = $.ajax({ ...
success: function(data) {console.log('complete');},
error: function(data) {...}
});
deferreds.push(deferred);
});
$.when.apply($, deferreds).done(console.log('done'));
});
});
当运行上面的代码(更多信息请参见fiddle)并检查我的console.log时,它表明在完成任何“完成”之前发生了“完成”(下图)。
请帮助我了解代码有什么问题。我希望在
console.log('complete')
之前所有对console.log('done')
的ajax调用。据我了解,这是$.when.apply
的重点。 最佳答案
我添加了示例工作代码。请在每个请求中添加承诺
deferred = $.ajax({ ...
success: function(data) {console.log('complete');},
error: function(data) {...}
}).promise();
并改变这一行
$.when.apply(this, deferreds)
请运行此代码并进行验证
function doSomething() {
var arrDef = [];
for (var i = 0; i < 2; i++) {
var deferred = $.ajax({
url:"https://jsonplaceholder.typicode.com/todos/1",
type: "GET",
contentType: "application/json;odata=verbose",
success: function(data) {
console.log('complete');
},
error: function(data) {
console.log('fail');
}
}).promise();
arrDef.push(deferred);
}
return arrDef;
}
var getters = doSomething();
// use apply to call $.when
$.when.apply(this, getters).then(function() {
console.log('Final complete');
// correctly writes out all responses
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
关于javascript - 进行多个AJAX调用$ .when.apply($,array)不能正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58859120/