javascript - Jquery/ajax : wait untill the first function finish and execute the second

标签 javascript jquery ajax

我有超过 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);

问题是什么?

最佳答案

我通常都是这样做的

  var getCategories = function(){
           return $.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>');
                });
            });
        }
   var getLinks = function(){
            return $.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>');
                });
            });
        };

   var getData = function(){
            return $.getJSON(serviceURL + 'get_links', function(data) {
                posts = data.posts;
                $.each(cats, function(index, post) {
                    $("#menuIcons").append('A : '+post.content);
                });
            });
        } ;

  function init(){
        $("body").append("3 function are done!");
     }

  // chain your promises here
 getCategories().done(getLinks().done(getData().done(init())));

您还可以添加 .fail() 来处理每个 Ajax 调用的错误

关于javascript - Jquery/ajax : wait untill the first function finish and execute the second,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29688459/

相关文章:

javascript - 从 AJAX 发送的数组中正确提取 bool 值

Javascript promise

javascript - React.js - 受控输入 toLocaleString()

javascript - 使用 Javascript/JQuery/Rails 3 动态添加新行

php - 使用ajax和php从数据库中删除图像

java - 更新动态 JSP 内容

javascript - FabricJS 不支持俄语字母

javascript - 有条件地添加 HTML 元素

javascript - 如何在 JavaScript 中将菜单重置为初始状态

javascript - 如何在 Materialise CSS 框架中添加对 select 的搜索