Jquery-按顺序执行自定义函数调用



我使用的是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);
    });
}

最新更新