Javascript 如何等待多个ajax请求完成?
我有一些Javascript 如何等待多个ajax请求完成?,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一些异步ajax请求 $.ajax({ url: 'first.php', async: true, success: function (data) { //do stuff } }); $.ajax({ url: 'second.php', async: true, success: function (data) { //do stuff } }); ... $.ajax({
异步ajax请求
$.ajax({
url: 'first.php',
async: true,
success: function (data) {
//do stuff
}
});
$.ajax({
url: 'second.php',
async: true,
success: function (data) {
//do stuff
}
});
...
$.ajax({
url: 'nth.php',
async: true,
success: function (data) {
//do stuff
}
});
我想在每个请求完成后运行console.log()
我通常编写以下代码:
$.ajax({
url: 'first.php',
async: true,
success: function (data) {
$.ajax({
url: 'second.php',
async: true,
success: function (data) {
//till the last ajax
}
});
}
});
然而,有人建议承诺。所有([])
如果我必须运行4个ajax请求,哪种方法最好/最快?使用Promise.all()
var承诺=[];
承诺。推送(新承诺(完成=>{
$.ajax({
url:'first.php',
async:true,
成功:完成
});
}));
承诺。推送(新承诺(完成=>{
$.ajax({
url:'second.php',
async:true,
成功:完成
});
}));
承诺。推送(新承诺(完成=>{
$.ajax({
url:'nth.php',
async:true,
成功:完成
});
}));
承诺。所有(承诺)。然后(()=>{
log(“所有ajax已完成”);
});代码>官方声明:
从jQuery 1.5开始,$.ajax()返回的jqXHR对象实现Promise接口,为它们提供Promise的所有属性、方法和行为(有关更多信息,请参阅Deferred object)
:
提供一种基于零个或多个表对象(通常是表示异步事件的延迟对象)执行回调函数的方法
因此,您可以执行以下操作:
jQuery.when(
$.ajax({
url: 'first.php',
async: true,
success: function (data) {
//do stuff
}
}),
$.ajax({
url: 'second.php',
async: true,
success: function (data) {
//do stuff
}
}),
...,
$.ajax({
url: 'nth.php',
async: true,
success: function (data) {
//do stuff
}
})
).then(function() {console.log(...);});
$。when()
或承诺。all()
这是否回答了您的问题@sandrooco Mh,我没有任何循环,但是你建议我的答案是关于Promise.all([])
。那么when()
呢?@Vinserello jQuery的$。when()
早在承诺之前就存在了。all()
成为标准。几年来,$.ajax
与本机承诺完全兼容,因此与承诺.all()
完全兼容。令人惊讶的是,您确认了承诺.all()
,但是,何时()
有什么区别?我从未考虑过何时()
。也许它更倾向于Promise.all([])。然后()
?$。when()
是jQuery替代“香草”Promise.all()
。除了一些语法上的差异外,它们做的事情基本相同。我提出了jQuery版本,因为您已经在使用jQuery处理ajax请求(一致性)。有趣的是,$.when()
大约在Promise.all()
首次在浏览器中本机实现之前3年就已经可用了。