我在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:'',
});
});
答案 0 :(得分:26)
三种方式:
func1成功时调用func2:
function func1() {
$.ajax({ ... }).done(func2);
}
使用Deferred
API在funky完成时调用func2:
e.preventDefault();
$.when(func1).then(func2);
使func1同步(不推荐):
function func1() {
$.ajax({url: '', async: false});
}
答案 1 :(得分:7)
由于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函数。
答案 2 :(得分:4)
在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: '',
});
});
答案 3 :(得分:2)
func1
成功调用fun2function func1(){
$.ajax({
url:'',
success:function(){
func2();
}
})
答案 4 :(得分:1)
您可以将“async”选项设置为false(对于第一个ajax调用)。
这意味着函数2将在函数1收到响应后调用,即完成它的执行。
function func1(){
$.ajax({
url:'',
async: false
});
});
答案 5 :(得分:0)
您也可以将您的函数作为参数传递:
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();