繁体   English   中英

在JQUERY中如何找到页面中的所有ajax调用都已完成?

[英]In JQUERY how to find that all ajax calls in a page have been completed?

在JQUERY中如何找到页面中的所有ajax调用都已完成?

我希望在完成所有ajax调用后执行一个方法。

如果你正在运行许多请求而你想知道他们什么时候完成,那么你正在寻找$.ajaxStop() ,这是一个全局事件,并且“在所有AJAX请求完成后调用”, 根据到文档

如果您知道通过在每次调用时增加一些变量来发送多少ajax 调用 您可以在ajax调用成功时使用另一个变量来计算成功调用的次数 当两个变量具有相同的值时,您可以假设所有的ajax调用都已完成。

查看这篇文章http://lostechies.com/joshuaflanagan/2011/10/20/coordinating-multiple-ajax-requests-with-jquery-when/

这是他们示例中的代码:

$.when( getTweets('austintexasgov'),
        getTweets('greenling_com'),
        getTweets('themomandpops')
      ).done(function(atxArgs, greenlingArgs, momandpopsArgs){
    var allTweets = [].concat(atxArgs[0]).concat(greenlingArgs[0]).concat(momandpopsArgs[0]);
    var sortedTweets = sortTweets(allTweets);
    showTweets(sortedTweets);
      });

var getTweets = function(user){
    var url='http://twitter.com/status/user_timeline/' + user + '.json';
    return $.get(url, {count:5}, null, 'jsonp');
}

工作对我来说很完美

要监视这样的任务,您始终可以构建状态机。 在每次ajax调用时,添加beforeSend()回调和complete()回调以将状态更新到某个状态机。 如果计数为0,则状态机上的completed方法将有条件地执行您的代码。

注意......如果存在重叠执行的ajax调用(并行运行),这将仅起作用。 如果您有串行运行的ajax调用,则每次所有活动的 ajax调用都处于已完成状态时,您的状态机将执行。

要正确使用串行ajax调用,您必须事先知道要进行多少次ajax调用,并针对该数字进行测试。

$.ajax({
    url: "test.html",
}).beforeSend(function() {
    ajaxState.started();
}).complete(function() {
    ajaxState.completed();
});

var ajaxState = {
    active: 0,
    started: function() {
        ajaxState.active++;
    },
    completed: function() {
        ajaxState.active--;
        if (!ajaxState.active) ajaxState.onComplete();
    },
    onComplete: function() {
        // Your code here.
    }
};

也许你在最后一个Ajax方法中调用一个方法? 无法知道您是否通过按钮进行任何Ajax调用,例如动态生成或其他任何操作。

如果您确定上次调用Ajax,请在成功时调用方法。

$.ajax({
    url: "test.html",
    type: "POST",
    data: {id : menuId},
}).done(function() {
    callMethod();
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM