each wait until finish $.ajax , and then continue

15,378

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);
            }
         }
    });
    
Share:
15,378
mIRU
Author by

mIRU

Updated on June 11, 2022

Comments

  • mIRU
    mIRU about 2 years
        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 !!!!