我有一个循环来通过$ 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
答案 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();
});
})