一尘不染

每个等待直到完成$ .ajax,然后继续

ajax

    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完成后再继续循环,我不能得到$ this var,因为它具有最后一个值,对不起我的英语,谢谢!!!


阅读 168

收藏
2020-07-26

共1个答案

一尘不染

选项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);
        }
     }
    

    });

2020-07-26