Javascript 在jQuery中执行每个post后回调
我有一个通过$post获取数据的循环。在获取所有数据之后,我需要一个回调函数。我当前的代码只会先回调然后再发布。我怎么能反过来做呢Javascript 在jQuery中执行每个post后回调,javascript,jquery,Javascript,Jquery,我有一个通过$post获取数据的循环。在获取所有数据之后,我需要一个回调函数。我当前的代码只会先回调然后再发布。我怎么能反过来做呢 function addMegaMenu(callback){ $('#megamenu > ul > li').each(function(){ $.post('/_menu.cfm', function(data){ console.log("post exec"); }) })
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
首先创建一个延迟列表,每个
$。post
将返回一个延迟
$.post('/_menu.cfm', ... in a loop
当您拥有承诺列表时:
$.when.apply($, promises).then(function(d) {
console.log("done", this, d);
}, function(e) {
console.log("failed");
});
由于您需要等待所有元素完成回调,因此必须跟踪有多少未完成的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();
});
})