【发布时间】:2015-04-17 00:58:35
【问题描述】:
我有超过 3 个函数,我想执行第一个函数,完成后我将执行第二个函数,依此类推。 这是我尝试使用的代码,但它会在一段时间内执行所有功能。
var categoriesReady = $.Deferred();
var linksReady = $.Deferred();
var dataReady = $.Deferred();
function getCategories(){
$.getJSON(serviceURL + 'get_categories', function(data) {
cats = data.categories;
$.each(cats, function(index, cat) {
$("#menuIcons").append('<li><a data-ajax="false" href="ca.html?id='+cat.id+'">'+cat.title+'</a></li>');
});
});
categoriesReady.resolve();
}
function getLinks(){
$.getJSON(serviceURL + 'get_links', function(data) {
links = data.links;
$.each(links, function(index, link) {
$("#menuIcons").append('<li><a data-ajax="false" href="link.html?id='+link.id+'">'+link.title+'</a></li>');
});
});
linksReady.resolve();
}
function getLinks(){
$.getJSON(serviceURL + 'get_links', function(data) {
cats = data.categories;
$.each(cats, function(index, cat) {
$("#menuIcons").append('<li><a data-ajax="false" href="ca.html?id='+cat.id+'">'+cat.title+'</a></li>');
});
});
linksReady.resolve();
}
function getData(){
$.getJSON(serviceURL + 'get_links', function(data) {
posts = data.posts;
$.each(cats, function(index, post) {
$("#menuIcons").append('A : '+post.content);
});
});
dataReady.resolve();
}
function init(){
$("body").append("3 function are done!");
}
$.when(getCategories(),getLinks(),getData()).then(init);
什么问题?
【问题讨论】:
-
您立即解决延期问题。你真的不需要它们,只需返回 $.getJSON,就像在
return $.getJSON(...中一样,它会起作用 -
问题是您试图以同步方式执行异步代码。如果您需要这样做 - 只需将下一个函数调用放在前一个函数的回调中。 (例如,当
getCategories()完成时,它会调用getLinks()等) -
@adeneo 我没有明白你要为我解释的内容,你能说得清楚一点吗?
-
@YemSalat 你能给我异步事物的idea方法吗?
标签: javascript jquery ajax