为了账号安全,请及时绑定邮箱和手机立即绑定

等到所有jQuery Ajax请求都完成了?

等到所有jQuery Ajax请求都完成了?

ITMISS 2019-05-29 16:35:15
如何使函数等到所有jQuery Ajax请求在另一个函数内完成?简而言之,我需要等待所有Ajax请求在执行下一个之前完成。但是怎么样?等到所有jQuery Ajax请求都完成了?
查看完整描述

3 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

如果您想等到文档中的所有ajax请求都完成,无论它们有多少,只需以$.ajaxStop这种方式使用事件:

  $(document).ajaxStop(function () {
      // 0 === $.active
  });

在这种情况下,无需猜测将来可能完成的应用程序中有多少请求。在某些情况下,ajax请求可以是函数内部逻辑的一部分,这可能非常复杂(例如调用其他函数),在这种情况下,您可能不会等到所述函数完成其整个逻辑而不是等待ajax部分完成。

$.ajaxStop这里也可以绑定到HTML您认为可能被修改的任何节点ajax

同样,此处理程序的目的是知道何时没有活动 ajax不清除或重置某些内容。

PS如果您不介意使用ES6语法,则可以使用Promise.all已知ajax方法。例:

Promise.all([ajax1(), ajax2()]).then(() => {
 // all requests finished successfully}).catch(() => {
 // all requests finished but one or more failed})

这里有一个有趣的一点是,它的作品都与Promises$.ajax请求。


查看完整回答
反对 回复 2019-05-29
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

jQuery ajaxQueue

//This handles the queues    (function($) {

  var ajaxQueue = $({});

  $.ajaxQueue = function(ajaxOpts) {

    var oldComplete = ajaxOpts.complete;

    ajaxQueue.queue(function(next) {

      ajaxOpts.complete = function() {
        if (oldComplete) oldComplete.apply(this, arguments);

        next();
      };

      $.ajax(ajaxOpts);
    });
  };})(jQuery);

然后你可以像这样在队列中添加一个ajax请求:

$.ajaxQueue({
        url: 'page.php',
        data: {id: 1},
        type: 'POST',
        success: function(data) {
            $('#status').html(data);
        }
    });


查看完整回答
反对 回复 2019-05-29
  • 3 回答
  • 0 关注
  • 755 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号