在第一个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();