【问题标题】:AJAX - Wait until response before making next AJAX callAJAX - 等待响应,然后再进行下一次 AJAX 调用
【发布时间】:2015-10-05 15:50:36
【问题描述】:

我创建了一个函数,它使用 class="health_report" 循环遍历每个 div 标签,为每个 div 进行 AJAX 调用。唯一的问题是它会立即进行 50 个 AJAX 调用(假设我有 50 个 DIV 标签)。这没关系,但出于我的目的,我需要它等到第一个 AJAX 调用完成(触发成功函数)移动到下一个 DIV 标记。代码如下:

$('.health_report').each(function(i, obj) {
    //  FIRST AJAX CALL
    generateHealthReport();
});

    function generateHealthReport(fileID,filter,slug,reportID,importance,reputation) {

        $.ajax({
            type: "POST",
            url: ajaxurl,
            data: {
                "action": 'generateHealthReport'
            },
            dataType: "html",
            success: function (returnData) {
               //   do something

            }
        });
    }

所以我尝试过的应该是在循环中添加一个计时器

我怎样才能让它如此循环(使用一个称为计时http://creativecouple.github.io/jquery-timing/的JQuery)

所以代码变成了这样:

$('.health_report').each($).wait(3000,function(i, obj) {
    //  FIRST AJAX CALL
    generateHealthReport();
});

循环现在在迭代之间暂停 3 秒,这使第一个 AJAX 调用有时间在循环移动到下一个 DIV 标记之前完成。这使得 AJAX 调用按照我需要的方式发生,但由于某种原因,它会出现故障,有时返回的 HTML 响应只是应该返回的 HTML 的一部分。还有另一种方法可以做到这一点吗?如何让循环暂停,直到它进行的 AJAX 调用完成?

【问题讨论】:

标签: jquery ajax loops timing


【解决方案1】:

您可以使用ajaxCompleteajax 中的完整选项:

$.ajax({
    type: "POST",
    url: ajaxurl,
    data: {
        "action": 'generateHealthReport'
    },
    dataType: "html",
    success: function (returnData) {
       //   do something

    }
    complete: function() {
       // This is called after completion of Ajax.
       // nextAjax();
    }
});

【讨论】:

  • .each 循环是否会等待完整的函数才能进入下一次迭代?
  • 您不能/不应该在 Javascript 中等待。完成后你必须调用下一个 Ajax。
猜你喜欢
  • 2014-05-06
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
相关资源
最近更新 更多