在第一个ajax函数调用完全完成后,Jquery继续另一个ajax函数

我在2个差异函数中有2个ajax调用。 我想用.click来调用这两个函数。 func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等待func1完全完成然后它只执行func2。

我试过.delay(),它有效,但我认为这是一个愚蠢的解决方案。

$("#updateLocation").click(function(e){ e.preventdefault; func1(); func2(); }); return false; }); function func1(){ $.ajax({ url:'', }); }); function func2(){ $.ajax({ url:'', }); }); 

三种方式:

func1成功时调用func2:

  function func1() { $.ajax({ ... }).done(func2); } 

在funky完成时使用Deferred API调用func2:

  e.preventDefault(); $.when(func1).then(func2); 

使func1同步(不推荐):

  function func1() { $.ajax({url: '', async: false}); } 

由于Ajax调用是异步的,因此在ajax调用完成之前,应用程序不会“暂停”,只需立即启动下一个调用。

JQuery提供在调用成功时调用的处理程序,如果在调用期间发生错误则调用另一个处理程序。

 $.ajax({ url: 'ajax/test.html', success: function(data) { $('.result').html(data); alert('Load was performed.'); }, error :function(jqXHR, textStatus, errorThrown) { alert("something went wrong"); } }); 

您将需要从成功处理程序中调用第二个AJAX函数。

在func1-> ajax-> succes回调中移动func2

 $("#updateLocation").click(function(e) { e.preventdefault; func1(); //func2(); }); return false; }); function func1() { $.ajax({ url: '', success: function() { /* other stuff */ func2(); } }); }); function func2() { $.ajax({ url: '', }); }); 

在func1中成功调用fun2

 function func1(){ $.ajax({ url:'', success:function(){ func2(); } }) 

您可以将选项“async”设置为false(对于第一个ajax调用)。

这意味着函数2将在函数1收到响应后调用,即完成它的执行。

  function func1(){ $.ajax({ url:'', async: false }); }); 

你也可以将你的函数作为参数传递给你:

 var secondFunc = function (func) { //Do ajax req or smt func("answer", "params"); }; var firstFunc = function() { secondFunc( function (answerFromFunc2, paramsFromfunc2) { var a = answerFromFunc2; var b = paramsFromfunc2; } ); //Do smt after the function request to the server is done var doSmt = "another func or variable"; }; firstFunc();