如何同步两个嵌套的jqueryforeach循环?
在内部循环的最后一次迭代中,我想调用一个包含ajax调用的jquery函数,每个循环有两个嵌套。只有在从这个ajax调用中获得结果之后,才应该进行下一次外部for each的迭代。有没有办法同步这些循环如何同步两个嵌套的jqueryforeach循环?,jquery,ajax,Jquery,Ajax,在内部循环的最后一次迭代中,我想调用一个包含ajax调用的jquery函数,每个循环有两个嵌套。只有在从这个ajax调用中获得结果之后,才应该进行下一次外部for each的迭代。有没有办法同步这些循环 $.ajax({ type: "POST", contentType: 'application/json;charset=utf-8', dataType:'json', url: 'getCall1', data
$.ajax({
type: "POST",
contentType: 'application/json;charset=utf-8',
dataType:'json',
url: 'getCall1',
data: JSON.stringify(send_data),
success: function(json)
{
$.each(json,function(i,item){
$.ajax({
type: "POST",
contentType: 'application/json;charset=utf-8',
dataType:'json',
url: 'getcall2',
data: JSON.stringify(send_data),
success: function(json)
{
$.each(json,function(i,item){
//For last iteration of this loop i want to call a function contain another ajax call. After completion of this call i want to continue with next iteration of outer loop
callFun();
});
}
});
});
}
});
function callFun(){
$.ajax({
type: "POST",
contentType: 'application/json;charset=utf-8',
dataType:'json',
url: 'getcall3',
data: JSON.stringify(send_data),
success: function(json)
{
}
});
}
您可以使用jQuery承诺或延迟对象,这将最适合您的问题。确保所有这些Ajax都是异步的。请像这样尝试:
var promiseOne, promiseTwo,promiseThree;
// Promises
promiseOne = $.ajax({ url: 'getCall1' });
promiseTwo = $.ajax({ url: 'getcall2' });
promiseThree=$.ajax({ url: 'getcall3' });
$.when(promiseOne).done(function(jsonValue1){
$.each(jsonValue1,function(value1){
$.when(promiseTwo).done(function(jsonValue2){
$.each(jsonValue2,function(value2){
$.when(promiseThree).done(function(jsonValue3){
$.each(jsonValue3,function(value3){
//write the code here
})
})
})
})
})
});
您可以使用回调函数处理它:
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
url: "getCall1",
data: JSON.stringify(send_data),
success: function(json)
{
var keys = Object.keys(json);
if(keys.length)
{
func1(0, keys, json);
}
}
});
function func1(index, keys, json1)
{
//you can get values from json1 using:
var val = json1[keys[index]];
//and use val
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
url: "getcall2",
data: JSON.stringify(send_data),
success: function(json2)
{
var keys2 = Object.keys(json2),
i;
if(keys2.length)
{
for(i = 0; i < keys2.length; i++)
{
//do as you wish
if(i === (keys2.length - 1))
{
callFun(
function callBack()
{
if(index < keys.length)
{
func1(++index, keys, json1);
}
}
);
}
}
}
}
});
}
function callFun(callbackFunc)
{
$.ajax({
type: "POST",
contentType: "application/json;charset=utf-8",
dataType: "json",
url: "getcall3",
data: JSON.stringify(send_data),
success: function(json)
{
callbackFunc();
}
});
}
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
url:“getCall1”,
数据:JSON.stringify(发送数据),
成功:函数(json)
{
var keys=Object.keys(json);
if(键长度)
{
func1(0,键,json);
}
}
});
函数func1(索引、键、json1)
{
//您可以使用以下方法从json1获取值:
var val=json1[键[索引];
//并使用val
$.ajax({
类型:“POST”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
url:“getcall2”,
数据:JSON.stringify(发送数据),
成功:函数(json2)
{
var keys2=Object.keys(json2),
我
if(键2.长度)
{
对于(i=0;i
祝你好运你应该了解它将如何影响你的表现。几个嵌套的AJAX调用需要花费很多时间来执行。我可以很快得到结果,但问题是两个循环没有等待函数调用“callFun”,我认为人们忽略了隐含的问题,您只在代码注释中指定了:
对于这个循环的最后一次迭代,我想调用一个包含另一个ajax调用的函数。完成此调用后,我想继续外循环的下一次迭代
我想通过getcall2和getcall3传递两个json值,我应该在哪里指定。您不需要所有这些嵌套,正如指定的那样,when
可以接受多个承诺,并在完成所有承诺后解析。您还错过了问题的要点:对于这个循环的最后一次迭代,我想调用一个包含另一个ajax调用的函数。在完成这个调用之后,我想在ajax Async中继续下一次外循环迭代。调用时,您必须等待完成调用并获取数据并使用它,否则您将得到“未定义”。