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

the*_*ner 2 javascript ajax jquery

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

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

    saveUpdateSeatDetails();
    markAbsent();

    setTimeout(function() {
        location.reload();
    }, 369);
});
Run Code Online (Sandbox Code Playgroud)

我尝试过使用async: false,但我得到了交战,表示它已被弃用.

我还提到了如何知道所有ajax调用何时完成?.但是,这适用于整个页面.我希望这仅适用于特定功能.

(没有ES6)

Ric*_* Ye 5

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

你需要更新你的函数返回$.ajax电话:

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

function markAbsent() {
    return $.ajax("http://example.com...");
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

$("#save").click(function() {
    $.when(saveUpdateSeatDetails(), markAbsent()).done(function() {
         alert("test")
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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