我使用的是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);
}
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调用可能会导致您的网站没有响应,这对您的用户体验不利。)ence)
您可以将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);
});
}