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


});  

thế nào có thể làm cho $.each đợi cho đến khi hành động $.ajax sẽ được hoàn thành, và sau đó tiếp tục vòng lặp, tôi không thể nhận được $ var này, bởi vì nó có giá trị cuối cùng , xin lỗi vì tiếng Anh của tôi, THANK YOU !!!!

+0

Có thể bạn có thể đặt thuộc tính 'async' là $ .ajax thành' false'? Xem: http://api.jquery.com/jQuery.ajax/ – Armin

Trả lời

14

Lựa chọn 1: Đổi thành phần tử tiếp theo trong mảng của bạn trong xử lý success.

Phương án 2: Hãy yêu cầu ajax đồng bộ:

  • toàn cầu:

    $.ajaxSetup({ async: false }); 
    
  • hoặc trực tiếp trong yêu cầu:

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

Cảm ơn, nó hoạt động :) – mIRU

+0

Hoạt động tốt ..... –

+0

Hoàn hảo - cảm ơn! – yab86

0

thử đặt ajaxsetup ({asynch: false}); trước mỗi vòng lặp của bạn thì sau khi vòng lặp reset nó trở lại đúng như vậy yêu cầu ajax tương lai của bạn vẫn có thể được asych

0

Đặt async false trênGọi.

0

Trong số $.ajax gọi thêm async: false và nó sẽ gửi yêu cầu chặn.

+1

Người downvoter có thể giải thích? – ridecar2

Các vấn đề liên quan