我正在使用jQuery 1.9.1。我有一个自定义函数,它执行一些操作然后执行$ .ajax调用。我想按顺序调用这个函数。我试过$ .when,但它没有解决我的问题。
function func(param) {
//some operations
$.ajax()
}
main() {
//first call
func(param1);
//wait for done and the run the second
func(param2);
}
答案 0 :(得分:6)
AJAX调用是异步的,这意味着你永远无法按照你的方式调用它们。
相反,您要做的是利用$.ajax()
调用中的回调函数。你最终会得到这样的东西:
function func(param) {
// Other stuff
$.ajax({
success: func(param2)
})
}
小心无限循环,因为你正在调用相同的函数。查看ajax()
方法的jQuery源代码并查看它们如何处理回调并以类似的方式编写方法可能是值得的,因此最终可能会出现类似的结果:
main() {
func(param1, {success: func(param2)});
}
(注意:$.ajax()
确实有async
设置,您可以设置为false,但IMO,很好地了解AJAX和回调如何工作,因为你将处理预期的行为,而不是反对它,从长远来看,这将使你头痛。此外,大型同步AJAX调用可能会导致您的网站无响应,这对您的用户体验不利。 )
答案 1 :(得分:4)
您可以将ajax调用作为延迟返回,这样您就可以访问done
函数。 http://api.jquery.com/category/deferred-object/
查看Shauna的答案,深入解释ajax。
function func(param) {
//some operations
return $.ajax()
}
main() {
//first call
func(param1).done(function(){
//wait for done and the run the second
func(param2);
});
}