每个帖子在jQuery中执行后的回调

时间:2015-09-11 00:01:18

标签: javascript jquery

我有一个循环来通过$ post获取数据。在获取所有数据之后,我需要有一个回调函数。我当前的代码只回调然后发布。我怎么能这样做呢?

function addMegaMenu(callback){
    $('#megamenu > ul > li').each(function(){
        $.post('/_menu.cfm',  function(data){
           console.log("post exec");
        })
    });
    callback.apply();
}
function addMobileIcon(){
    console.log("callback exec");
}
$(function(){
    addMegaMenu(function(){
        addMobileIcon();
    });
})

打印出来:

callback exec
post exec

我需要做到:

post exec
callback exec

2 个答案:

答案 0 :(得分:1)

首先创建一个延迟列表,每个$.post将返回一个延迟...

$.post('/_menu.cfm',  ... in a loop

当你有这个承诺清单时:

$.when.apply($, promises).then(function(d) {
         console.log("done", this, d);
    }, function(e) {
         console.log("failed");
    });

答案 1 :(得分:0)

由于您需要等到所有元素都完成回调,因此您必须跟踪有多少未完成的POST请求:

var counter = 0;
function addMegaMenu(callback){
    $('#megamenu > ul > li').each(function(){
        counter++;
        $.post('/_menu.cfm',  function(data){
            counter--;           
            console.log("post exec");
            if (counter==0) {
                callback.apply();
            }
        })
    });
}
function addMobileIcon(){
    console.log("callback exec");
}
$(function(){
    addMegaMenu(function(){
        addMobileIcon();
    });
})