2011-12-28 4 views
5
function genTask(elem){ 
    elem.each(function(){ 
     $this=$(this).parent('.cntTasks'); 
     var pattern=/taskId-(.*)$/ 
     var idTask=$this.attr('id').match(pattern); 
     var data='id_task='+idTask[1]; 
     if(typeof jsVar2 !='undefined') data+=jsVar2; 
     $.ajax({ 
      type: "POST", 
      url: domain+"/view_tasks/gen_tasks/", 
      dataType: 'html', 
      data: data, 
      success: function(dt){ 
       $this.find('.contChildTasks').html(dt); 
       childs=$this.children('.taskDesc').find('.has_child'); 
       if(childs.length!=0) 
        genTask(childs); 
       } 
      } 
     }); 
     $this.find('.taskDesc').show(); 

    }); 
} 

if(typeof jsVar2 !='undefined') genTask($('.cntTasks .has_child')); 


});  

как можно сделать $.each подождать, пока действие $.ajax не будет закончен, а затем продолжить цикл, я не могу получить $ это вар, потому что она имеет последнее значение , извините за мой английский, СПАСИБО !!!!

+0

Возможно, вы можете установить атрибут 'async' $ .ajax на' false'? См.: Http://api.jquery.com/jQuery.ajax/ – Armin

ответ

14

Вариант 1: Переключиться на следующий элемент в массиве в обработчике success.

Вариант 2: Сделайте Ajax запросы синхронно:

  • глобальный:

    $.ajaxSetup({ async: false }); 
    
  • или непосредственно в запросе:

    $.ajax({ 
        async: false, 
        type: "POST", 
        url: domain+"/view_tasks/gen_tasks/", 
        dataType: 'html', 
        data: data, 
        success: function(dt){ 
         $this.find('.contChildTasks').html(dt); 
         childs=$this.children('.taskDesc').find('.has_child'); 
         if(childs.length!=0) 
          genTask(childs); 
         } 
        } 
    }); 
    
+0

Спасибо, это работает :) – mIRU

+0

Работает хорошо ..... –

+0

Perfect - спасибо! – yab86

0

попробуйте поставить ajaxsetup ({asynch: false}); перед вашим каждым циклом , а затем после того, как цикл вернет его обратно к истинному, так что ваш будущий запрос ajax все еще может быть asych

0

Установите async ложь на $.ajax звонок.

0

В вашем ответе $.ajax добавить async: false и он отправит запрос блокировки.

+1

Может ли пояснитель пояснить? – ridecar2

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