jQuery延迟循环
我试图为页面上的每个选中复选框调用ajax函数。一旦所有这些ajax调用都完成了,我想做些别的事情。在下面的示例中,“所有调用已完成”文本在任何“单个调用已完成”文本之前写入控制台。我怎样才能等到所有ajax调用完成?谢谢jQuery延迟循环,jquery,ajax,loops,deferred,Jquery,Ajax,Loops,Deferred,我试图为页面上的每个选中复选框调用ajax函数。一旦所有这些ajax调用都完成了,我想做些别的事情。在下面的示例中,“所有调用已完成”文本在任何“单个调用已完成”文本之前写入控制台。我怎样才能等到所有ajax调用完成?谢谢 function ajax_function() { return $.ajax({ url: "submit.php", type: "POST", dataType: "json", data: form_data, cache
function ajax_function() {
return $.ajax({
url: "submit.php",
type: "POST",
dataType: "json",
data: form_data,
cache: false
})
}
var deferreds = $('input:checkbox:checked.checkprint').map(function(i, elem) {
$.when(ajax_function()).then(function(data) {
console.log('single call completed');
return data;
});
});
$.when.apply($, deferreds.get()).done(function() {
console.log('all calls completed');
});
您可以使ajax调用同步
function ajax_function() {
return $.ajax({
url: "submit.php",
type: "POST",
dataType: "json",
data: form_data,
cache: false,
async:false
})
}
备选案文2:
var totalnumber = $('input:checkbox:checked.checkprint').length;
var counter = { t: 0 };
var deferreds = $('input:checkbox:checked.checkprint').map(function(i, elem) {
$.when(ajax_function(totalnumber,counter)).then(function(data) {
console.log('single call completed');
return data;
});
});
function ajax_function(totalnumber,counter) {
return $.ajax({
url: "submit.php",
type: "POST",
dataType: "json",
data: form_data,
cache: false,
}).done(function( html ) {
counter.t++;
if (counter.t == totalnumber) {
console.log('all calls completed');
}
});
}
为什么是counter.t,因为对象是作为引用传递的,我们需要更改counter.t的值。我想我已经完成了使用ajaxStop()尝试完成的任务
在我看来,每次点击复选框都发送数据是个坏主意,当用户点击按钮时,你可以放置一个按钮,读取所有这些值并将其发送到服务器。这是可行的,但我希望它们都同时启动。当我更改为async:false时,它会等待每个调用完成,然后再继续。我希望他们一起开始,一旦他们都完成了,继续。
$(document).delegate('#submit_all', 'click', function(e) {
$('input:checkbox:checked.checkprint').each(function() {
ajax_function();
});
$("#submit_all").one("ajaxStop", function() {
console.log('all calls completed');
});
});