Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Javascript同步运行Ajax函数?_Javascript_Jquery - Fatal编程技术网

如何从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);
        }
    });
}

您能否澄清一下,您想等待,以便用户知道操作已完成。如果您使代码同步,这意味着网页中的任何内容在运行之前都无法工作(想想程序在执行某些操作时是如何冻结的)。我建议您在之后显示一条消息,或者将按钮变灰。微妙的暗示是最好的暗示。可能的重复