2016-04-18 4 views
4

У меня есть список языков, ['en', 'de'] и т. Д., И я хочу взять сложный запрос ajax для каждого языка. При первом запросе ajax я получаю количество процентов для каждого языка.Порядок отложенных запросов jquery ajax

var languages = ['en', 'de', 'es', 'fr', 'it', 'cn']; 
intents_dic = []; 
chart_quantity = ['quantity']; 
for (var x = 0; x < languages.length; x++){ 
    $.ajax({ 
    url: 'url', 
    type: 'GET', 
    async: false, 
    success: function(data){ 
     for (i in data){ 
      intents_dic.push(data[i]['id']) 
     } 
     var intents_count = 0; 
     var deferreds = []; 

И на втором этапе мне нужно подсчитать количество фраз для каждого намерения с предыдущего вызова. Я использую список отложенных для этой задачи.

for (var id = 0; id < intents_dic.length; id++){ 
    deferreds.push($.ajax({ 
    url: 'url', 
    type: 'GET', 
    success: function(data){ 
     intents_count += data['templates'].length; 
     } 
    })) 
} 
$.when.apply(null, deferreds).done(function() { 
    chart_quantity.push(intents_count); 
}) 

Но когда отложенные запросы Ajax завершены, порядок завершения отличается список языков порядка (это основной для построения диаграммы). Можно ли устранить эту проблему, или это функция вызовов ajax? Спасибо.

+0

Да, это особенность. – Bergi

+0

Не используйте 'async: false'! – Bergi

+0

@ Bergi лучше использовать закрытие вместо запросов на синхронизацию? –

ответ

0

Вот ваш разветвленный и, следовательно, рабочий jsfiddle (асинхронные вызовы с упорядоченными результатами).

for(var i = 0; i < 5; i++){ 
    setTimeout(function(x){ 
     done(x,results); 
    }(i),1000); 
} 

http://jsfiddle.net/htuz3t3m/2/

+0

Спасибо, работает для меня. –

+0

Обратные вызовы важны для jQuery. – Mantisse

Смежные вопросы