2015-02-06 3 views
0

Я разрабатываю проект, который должен обрабатывать вызовы ajax последовательным образом. Код у меня есть что-то вроде:Последовательное выполнение js

for(var j=0; j<3;j++) { 
       $.ajax({ 
        url:url[j], 
        async:false 
       }).done(function(result){ 
        var data = result.data; 
        for(var i=0; i < data.length;i++){ 
         analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">"; 
         analyses += "<br/>Analysis : " + data[i] + "<br/>"; 
         analyses += "</div></div>"; 
         $("#analysesPlaceHolder").html(analyses); 
        } 
       }); 

      } 

Однако, теперь он просто случайным образом выбирает URL из списка (иногда это первое, иногда это не так). Как сделать выполнение последовательным, чтобы код сначала выполнял первый вызов ajax, затем второй и т. Д.

+0

Ваш вызов '$ .ajax' является синхронизацией, так как вы указываете' async: false', а также вы берете URL-адрес из 'array', который вы зацикливаете по порядку ... вероятно, проблема« случайно » в той части, где вы создаете массив 'url'. – albciff

+0

Возможно, '$ .when' то, что вы хотите ... посмотрите здесь http://api.jquery.com/jQuery.when/ –

ответ

0

Я бы не рекомендовал использовать ajax-вызовы в цикле.

Вот это лучший способ, который увеличивает счетчик в АЯКС обратного вызова, а затем запускает следующий запрос Аякса:

var urlCount = 0; 

var makeAjaxCall = function(count) { 
    $.ajax({ 
     url:url[count], 
    }).done(function(result){ 
     var data = result.data; 
     for(var i=0; i < data.length;i++){ 
      analyses += "<div><div id=\"" + data[i] + "\" class=\"module\">"; 
      analyses += "<br/>Analysis : " + data[i] + "<br/>"; 
      analyses += "</div></div>"; 
      $("#analysesPlaceHolder").html(analyses); 
     } 

     urlCount++; 
     if (urlCount < 3) { 
      makeAjaxCall(urlCount); 
     } 
    }); 
} 

makeAjaxCall(urlCount); 

Вы также могли приковать АЯКС вызовы с помощью обещаний, как указано в комментарии выше.