ajax - 如何确认多个 AJAX 调用已完成?

标签 ajax jquery jqgrid

$(document).ready(function() {
    $("#list1").jqGrid({
        url: 'example1.php',
        /*balabala...*/
        gridComplete: function() {

        }
    });

    $("#list2").jqGrid({
        url: 'example2.php',
        /*balabala...*/
        gridComplete: function() {

        }
    });

    /*I want to do something here, but the above grids must be both complete first.*/
    Something...
});

我该怎么办?谢谢!

最佳答案

最简单的方法是将您的“某些内容”放入 gridComplete 回调中,但让两个回调检查另一个回调是否已完成。大致如下:

function do_something_wonderful() {
    // This is the awesome stuff that you want to
    // execute when both lists have loaded and finished.
    // ...
}

var one_done = false;
function done_checker() {
    if(one_done) {
        // The other one is done so we can get on with it.
        do_something_wonderful();
    }
    one_done = true;
}

$("#list1").jqGrid({
    //blah blah blah
    gridComplete: done_checker
});
$("#list2").jqGrid({
    //blah blah blah
    gridComplete: done_checker
});

只需进行一些小修改,就可以很好地扩展到两个以上的列表:

  • 使用var how_many_done = 0;而不是one_done
  • 执行 ++how_many_done; 而不是 one_done = true; 并将其移至 done_checker 的顶部。
  • if(one_done) 替换为 if(how_many_done == number_of_tasks),其中 number_of_tasks 是您有多少个 AJAX 任务。<

一般版本看起来有点像这样:

var number_of_tasks = 11; // Or how many you really have.
var how_many_done   = 0;
function done_checker() {
    ++how_many_done;
    if(how_many_done == number_of_tasks) {
        // All the AJAX tasks have finished so we can get on with it.
        do_something_wonderful();
    }
}

更好的版本会将状态包装在闭包中:

var done_checker = (function(number_of_tasks, run_when_all_done) {
    var how_many_done = 0;
    return function() {
        ++how_many_done;
        if(how_many_done == number_of_tasks) {
            // All the AJAX tasks have finished so we can get on with it.
            run_when_all_done();
        }
    }
})(do_something_wonderful, 11);

关于ajax - 如何确认多个 AJAX 调用已完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5932432/

相关文章:

ajax - Spring-roo REST JSON Controller 处理日期字段

javascript - PHP json_encode 多维关联数组

javascript - 滚动到 div 顶部

css - 如何以编程方式实现jqgrid搜索覆盖

javascript - Web api 中验证模型失败时返回警报消息

javascript - 删除图像会导致错误 undefined method `count' for nil :NilClassh Ruby on Rails

JQuery - 从下拉列表中选择的选项中删除复选框

javascript - 使用 JPlayer Circle Player 创建播放列表

javascript - 使用 jqGrid 编辑回调发送额外参数

javascript - 将数据推送到数组填充 jqGrid