我有三个可以同时运行的ajax调用。但是我希望浏览器等到所有ajax调用完成。一种方法是为每个人设置async为false,但之后我会失去宝贵的时间,因为它们可以同时运行。有没有办法同时运行它们但是让浏览器挂起直到所有完成?
答案 0 :(得分:1)
成功后,调用回调函数:
$.ajax({
success: function(){ checkAjax(); }
});
在回调函数中计算你有多少回应。
var totalEnded = 0, totalAjax = 3;
function checkAjax() {
totalEnded++;
if (totalEnded == totalAjax) {
/* Do important stuff here, or call another function */
}
}
答案 1 :(得分:0)
如果你正在使用jQuery然后查看$.when
,你可以提供一个成功回调,当所有请求都加载完成后执行回调。
答案 2 :(得分:0)
为了更轻松地使用异步内容,您可以使用promises pattern。如果您使用的是jQuery,则可以使用jQuery.when()
。来自文档:
$.when( $.ajax( "/p1.php" ), $.ajax( "/p2.php" )).done(function( a1, a2 ) {
//do this when both ajax calls are done
});
答案 3 :(得分:0)
您可以使用延迟对象执行此操作,因为ajax本身会返回该对象。请参阅Pass in an array of Deferreds to $.when()
var deferreds = [
$.post(),
$.get(),
];
$.when.apply($, deferreds).done(function() {
// All ajax requests was done
});