Javascript 循环中的嵌套ajax调用没有按顺序执行
我有一个嵌套的AJAX调用 AJAX位:Javascript 循环中的嵌套ajax调用没有按顺序执行,javascript,jquery,ajax,promise,jquery-deferred,Javascript,Jquery,Ajax,Promise,Jquery Deferred,我有一个嵌套的AJAX调用 AJAX位: function a(val){ var def = $.Deferred(); return $.ajax({ type : "get", url : "myservlet", beforeSend : function() { $('#text1').css({ "color" : "red" });
function a(val){
var def = $.Deferred();
return $.ajax({
type : "get",
url : "myservlet",
beforeSend : function() {
$('#text1').css({
"color" : "red"
});
$('#text1').text("Running Graph");
},
data : {
"boxval" : val
}
}).done(function(responseText) {
$('#text1').css({
"color" : "green"
});
$('#text1').text(responseText);
}).then(function(){
return $.when(b());
});
}
function b(){
return $.ajax({
type : "get",
url : "ConnectServlet",
beforeSend : function() {
$('#text2').css({
"color" : "red"
});
$('#text2').text("Copying Files and preparing pSet");
}
}).done(function(responseText) {
$('#text2').css({
"color" : "green"
});
$('#text2').text(responseText);
}).then(function(){
return $.when(c());
});
}
function c(){
return $.ajax({
type : "get",
url : "CopyServlet",
beforeSend : function() {
$('#text3').css({
"color" : "red"
});
$('#text3').text("Running Dynamic Diff Graph");
}
}).done(function(responseText) {
$('#text3').css({
"color" : "green"
});
$('#text3').text(responseText);
}).then(function(){
return $.when(d());
});
}
function d(){
$('#summary').show();
}
我需要的是整个ajax调用链(主ajax调用、函数b、函数c和函数d),以便为循环的每个迭代执行
取而代之的是,执行整个主ajax调用时,没有为循环的每次迭代调用函数b
我需要它执行以下操作:
- a
- b
- c
- d
- a
- b
- c
- d
- a
- a
- a
- b
如何解决这个问题?每次调用都需要一段时间才能执行,而您根本没有考虑到这一点 您启动第一个GET请求,可能需要几秒钟才能返回。您的JavaScript不会等待这种情况发生,而是一直执行代码 一个解决方案是引入类似“javascript承诺”的东西。基本上,只有在第一次调用实际完成并获得响应数据后,才能调用函数b 以下是一篇文章,让您开始学习: 不过,不要停在这里,多读一些关于这个主题的文章。您可以链接多个类似的东西,并根据需要设置行为