jQuery调用Deferred函数不起作用

时间:2020-10-15 15:19:21

标签: jquery ajax jquery-deferred

checkSessionCount 调用 loadLevel1Categories ,然后对所有.alvl1类进行操作。据我所知,我知道数据正在返回。延迟似乎没有起作用。

我已经通过将setTimeout放在loadLevel1Categories()之后进行了测试;一切都以这种方式工作,但这很麻烦,并且将返回不同数量的数据,因此无法预测要添加多少延迟。

$(function(){
    
    var objCats = $('#portal_categories');
    
    function loadLevel1Categories() {
        
        objCats.empty();
        
        var dfd = $.Deferred();
    
        $.getJSON('getdata.php?ty=ca1&ts='+new Date(),function(){
            //success
        }).done(function(data){
            
            var r = new Array, j = -1;
            $.each(data,function(k,item) {
    
                r[++j] = '<a href="#" class="alvl1" data-id="'+item.id+'">'+item.title+'</a>';
                
            });
            
            objCats.html(r.join(''));
            
            dfd.resolve();
    
        }).fail(function(){
            objCats.html('Unable to locate any data');
        }); 
        return dfd.promise();
    }
     
    function checkSessionCount() {
    
        $('#debug').empty();
        loadLevel1Categories();
    
        //do something with the .alvl1 elements once data is returned
        //but this bit isn't working as the database hasn't been returned yet
        
    }

    //on page load
    checkSessionCount();
    
});

1 个答案:

答案 0 :(得分:0)

您可以使用.then回调

loadLevel1Categories().then(()=>{
   //do something with the .alvl1 elements once data is returned
})