在第一个ajax函数调用完全完成后,Jquery继续执行另一个ajax函数
我在两个不同的函数中有两个ajax调用。我想使用。单击可调用这两个函数 . func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等到func1完全完成,然后只执行func2 我试过了。delay(),但我认为这是一个愚蠢的解决方案在第一个ajax函数调用完全完成后,Jquery继续执行另一个ajax函数,ajax,jquery,Ajax,Jquery,我在两个不同的函数中有两个ajax调用。我想使用。单击可调用这两个函数 . func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等到func1完全完成,然后只执行func2 我试过了。delay(),但我认为这是一个愚蠢的解决方案 $("#updateLocation").click(function(e){ e.preventdefault; func1(); func2(); }); return f
$("#updateLocation").click(function(e){
e.preventdefault;
func1();
func2();
});
return false;
});
function func1(){
$.ajax({
url:'',
});
});
function func2(){
$.ajax({
url:'',
});
});
您可以将选项“async”设置为false(对于第一个ajax调用)
这意味着函数2将在函数1收到响应后调用,即完成其执行
function func1(){
$.ajax({
url:'',
async: false
});
});
将func2移动到func1->ajax->成功回调中
$("#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();
}
})
三种方式:
在func1成功时调用func2:
function func1() {
$.ajax({ ... }).done(func2);
}
当funky完成时,使用Deferred
API调用func2:
e.preventDefault();
$.when(func1).then(func2);
使func1同步(不推荐):
由于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函数。您还可以将函数作为如下参数传递:
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();
请记住,这样做会暂停整个脚本并导致它“挂起”,直到(现在是同步的)操作完成!这里需要注意的是:这个回复和AJAX async:false选项现在被弃用已经很久了。这是最简单的形式!稍有不同的是,您有两个独立的ajax调用,您只想异步调用,但当两个调用都完成时,您想启动第三个,应该是
$。when(func1,func2)。然后(func3)
也可以通过使用async/await函数的较新JS语法来完成(可能需要Babel,但要在浏览器中工作):这里只是一个注释,因为问题是关于AJAX的。
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();