2011-12-28 11 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')); 


});  

jak to możliwe, aby $.each poczekać aż akcja $.ajax zostaną zakończone, a następnie kontynuować pętli, nie mogę dostać $ to zmienna, ponieważ ma ostatnią wartość , przepraszam za mój angielski, DZIĘKUJĘ !!!!

+0

Być może mógłbyś ustawić atrybut 'async' $ .ajax na 'false'? Zobacz: http://api.jquery.com/jQuery.ajax/ – Armin

Odpowiedz

14

Opcja 1: Przełącz do następnego elementu w tablicy w instrukcji obsługi success.

Opcja 2: Sprawdź, Ajax żądań jednocześnie:

  • globalny:

    $.ajaxSetup({ async: false }); 
    
  • lub bezpośrednio w zgłoszeniu:

    $.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

Dziękuję, działa :) – mIRU

+0

Działa dobrze ..... –

+0

Perfect - thanks! – yab86

0

spróbuj umieścić ajaxsetup ({asynch: false}); przed każdą pętlą następnie po zresetowaniu pętli do wartości true, więc twoje przyszłe żądanie ajax nadal może być takie jak:

0

Ustaw async false na $.ajax połączenie.

0

Zadzwoń pod numer async: false i wyślij żądanie blokowania.

+1

Czy osoba dokonująca wstrząsu mogłaby wyjaśnić? – ridecar2

Powiązane problemy