如何从Javascript同步运行Ajax函数?
我有以下代码:如何从Javascript同步运行Ajax函数?,javascript,jquery,Javascript,Jquery,我有以下代码: $('#DoButton').click(function (event) { event.preventDefault(); $("input:checked").each(function () { var id = $(this).attr("id"); $("#rdy_msg").text("Starting" + id); doAction(id); }); }); function doAction(id) {
$('#DoButton').click(function (event) {
event.preventDefault();
$("input:checked").each(function () {
var id = $(this).attr("id");
$("#rdy_msg").text("Starting" + id);
doAction(id);
});
});
function doAction(id) {
var parms = { Id: id };
$.ajax({
type: "POST",
traditional: true,
url: '/adminTask/doAction',
async: false,
data: parms,
dataType: "json",
success: function (data) {
$("#rdy_msg").text("Completed: " + id);
},
error: function () {
var cdefg = data;
}
});
}
单击按钮时,它会检查表单,并为每个选中的输入调用doAction(),然后调用Ajax函数。我希望在完成一个调用和运行下一个调用之间有2秒的延迟,使所有调用都同步。延迟是为了让用户有时间看到最后一个操作已经完成
通过设置async=false,这真的会让ajax函数等待吗
如何在Ajax运行之后和下一次调用doAction之前添加2秒钟的等待时间?对Ajax调用doAction使用setTimeout。jQuery中有一个选项可以将Ajax函数设置为同步
$.ajaxSetup({
async: false
});
要使函数等待,可以使用
试着解决这个问题。试着用递归来解决
$('#DoButton').click(function (event) {
event.preventDefault();
doAction( $("input:checked").toArray().reverse() );
});
function doAction(arr) {
if( arr.length == 0 ) return;
var id = arr.pop().id;
$("#rdy_msg").text("Starting" + id);
$.ajax({
type: "POST",
traditional: true,
url: '/adminTask/doAction',
async: false,
data: { Id: id },
dataType: "json",
success: function (data) {
$("#rdy_msg").text("Completed: " + id);
setTimeout(function(){ doAction(arr); }, 2000);
},
error: function () {
var cdefg = data;
$("#rdy_msg").text("Error: " + id);
setTimeout(function(){ doAction(arr); }, 2000);
}
});
}
您能否澄清一下,您想等待,以便用户知道操作已完成。如果您使代码同步,这意味着网页中的任何内容在运行之前都无法工作(想想程序在执行某些操作时是如何冻结的)。我建议您在之后显示一条消息,或者将按钮变灰。微妙的暗示是最好的暗示。可能的重复