我怎么知道特定函数的所有AJAX调用何时完成?

时间:2018-04-26 05:33:19

标签: javascript jquery ajax

我有一个函数,它有许多不同的函数调用,里面有很多ajax调用。如何知道$("#save").click(...)触发的所有ajax调用是否已完成?

$("#save").click(function() {

    saveUpdateSeatDetails();
    markAbsent();

    setTimeout(function() {
        location.reload();
    }, 369);
});

我尝试使用async: false,但我得到了反对意见,建议将其弃用。

我还提到How to know when all ajax calls are complete ?。但是,这适用于整个页面。我希望这只适用于特定的功能。

(没有ES6)

1 个答案:

答案 0 :(得分:5)

你应该jQuery' Deferred(稍微不同但主要与Promises兼容),这是$.ajax次调用返回的。因为你在答案中使用了jQuery,所以我假设你在这里使用$.ajax

您需要将您的功能更新为返回 $.ajax来电:

function saveUpdateSeatDetails() {
    return $.ajax("http://example.com...");
}

function markAbsent() {
    return $.ajax("http://example.com...");
}

然后你可以这样做:

$("#save").click(function() {
    $.when(saveUpdateSeatDetails(), markAbsent()).done(function() {
         alert("test")
    });
});

$.when在执行函数之前等待Ajax请求完成。

由于这是jQuery 1.5+的一部分,任何与jQuery兼容的浏览器都可以运行此代码(不需要ES6)。