我有一个函数,它有许多不同的函数调用,里面有很多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)
答案 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)。