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'));
});
how is possible to make $.each
to wait until action $.ajax
will be finished , and then continue loop , i cannot get $this var , because it has the last value , sorry for my English , THANK YOU !!!!
Option 1: Switch to next element in your array in the success
handler.
Option 2: Make ajax requests synchronously:
global:
$.ajaxSetup({ async: false });
or directly in the request:
$.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); } } });
try put ajaxsetup({asynch:false}); before your each loop then after the loop reset it back to true so your future ajax request can still be asych
In your $.ajax
call add async: false
and it will send a blocking request.
Joel A. Villarreal Bertoldi
Set async
to false on the $.ajax
call.
来源:https://stackoverflow.com/questions/8657401/each-wait-until-finish-ajax-and-then-continue