У меня есть данные, как показано ниже, и два цикла javascript и ajax для получения данных. Эти две петли корректно работают с значениями i j. Но если я добавлю ajax во внутренний цикл, запросы не будут проходить последовательно. Мне нужны данные, которые нужно получить в последовательности циклов. Как мы можем достичь этого?Закрытие скрипта java для асинхронных вызовов ajax
var final = {};
final.reports = ['a','b','c']
final.clients = ['x','y']
final.reportDataJson = [];
for(var i=0;i<final.reports.length;i++){
(function(i,reactthis){
for(var j=0;j<final.clients.length;j++){
(function(i,j,final){
console.log(i+" "+j+" "+final.clients[j])
// this shows correct i j values
$.ajax({
url: url,
cache: false,
success: function(html) {
var reportResponse = {
reportname : final.reports[i],
clientname : final.clients[j],
reporthtml : html,
reportgraph : ''
}
final.reportDataJson.push(reportResponse)
//console.log(i,j)
if(i == final.reports.length-1 && j == final.clients.length-1){
console.log(final.reportDataJson);
}
},
error: function(xhr, status, err) {
if(i == final.reports.length-1 && j == final.clients.length-1){
}
}
})
})
}
})(i,final);
}
'// это показывает правильный IJ values' - Сомневаюсь, код там не побежит –
' $ .ajax' является асинхронным, и нет никакой гарантии, что порядок, в котором они выполняются, будет в порядке, в котором они заканчиваются, поэтому 'if (i == final.reports.length-1 && j == final.clients.length-1) {' не гарантирует, что все данные были получены для начала, и, конечно, порядок, вероятно, будет неправильным ... посмотрите на '$ .when' для решения –