jQuery 在 .ajax 成功时继续下一个循环 (.each)
jQuery continue with next loop (.each) on .ajax success
我有很多复选框,如果一个复选框被选中,我将用 .ajax 发送它的值。
目前我正在使用 async : false
来确保它在 ajax 成功后从下一个开始循环。
但是,它会冻结浏览器,直到它完成 .each
循环。
我在这里看到了类似的事情:jQuery continue loop execution after ajax success 但无法弄清楚如何使它适应我使用 .each
而不是 for
[=18= 的情况]
$("input:checkbox:checked").each(function () {
$.ajax({
async : false,
url:"import.php",
method:"POST",
data:{id:id, val:val},
success:function(data) {
//do some action
}
});
});
使用来自的相同原则:
var elements = $("input:checkbox:checked")
var i = 0;
doLoop();
function doLoop() {
if ( i >= elements.length ) {
return;
}
// To get the element we are up to: $(elements[i])
$.ajax({
async : false,
url:"import.php",
method:"POST",
data:{id:id, val:val},
success:function(data) {
//do some action
i++
doLoop()
}
});
}
您可能希望更改 data:{id:id, val:val}
以使用单个复选框中的 ID 和值,因此在 .ajax()
调用之前您可能希望:
let e = $(elements[i])
并获取 id 和值:
data:{id:e.attr('id'), val:e.val()}
我有很多复选框,如果一个复选框被选中,我将用 .ajax 发送它的值。
目前我正在使用 async : false
来确保它在 ajax 成功后从下一个开始循环。
但是,它会冻结浏览器,直到它完成 .each
循环。
我在这里看到了类似的事情:jQuery continue loop execution after ajax success 但无法弄清楚如何使它适应我使用 .each
而不是 for
[=18= 的情况]
$("input:checkbox:checked").each(function () {
$.ajax({
async : false,
url:"import.php",
method:"POST",
data:{id:id, val:val},
success:function(data) {
//do some action
}
});
});
使用来自的相同原则:
var elements = $("input:checkbox:checked")
var i = 0;
doLoop();
function doLoop() {
if ( i >= elements.length ) {
return;
}
// To get the element we are up to: $(elements[i])
$.ajax({
async : false,
url:"import.php",
method:"POST",
data:{id:id, val:val},
success:function(data) {
//do some action
i++
doLoop()
}
});
}
您可能希望更改 data:{id:id, val:val}
以使用单个复选框中的 ID 和值,因此在 .ajax()
调用之前您可能希望:
let e = $(elements[i])
并获取 id 和值:
data:{id:e.attr('id'), val:e.val()}