AJAX - 在进行下一次AJAX调用之前等到响应

时间:2015-10-05 15:50:36

标签: jquery ajax loops timing

我创建了一个循环遍历每个div标签的函数,使用class =" health_report",对于每个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

            }
        });
    }

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

如何使循环(使用名为timing 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调用之前使循环暂停?

1 个答案:

答案 0 :(得分:1)

您可以ajaxComplete使用ajax或完成选项:

$.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();
    }
});