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

Daw*_*łąb 3 jquery function sequence

我正在使用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);
}
Run Code Online (Sandbox Code Playgroud)

Sha*_*una 6

AJAX调用是异步的,这意味着你永远无法按照你的方式调用它们.

相反,您要做的是利用调用中的回调函数$.ajax().你最终得到这样的东西:

function func(param) {
   // Other stuff
   $.ajax({
      success: func(param2)
   })
}
Run Code Online (Sandbox Code Playgroud)

但是要小心无限循环,因为你正在调用相同的函数.查看该ajax()方法的jQuery源代码并查看它们如何处理回调并以类似的方式编写方法可能是值得的,因此最终可能会出现类似于:

main() {
   func(param1, {success: func(param2)});
}
Run Code Online (Sandbox Code Playgroud)

(注意:$.ajax()确实有一个async设置,你可以设置为false,但IMO,最好能够很好地理解AJAX和回调是如何工作的,因为你将使用预期的行为,而不是反对它,从长远来看,这将为您节省麻烦.此外,大型同步AJAX调用可能会导致您的网站无响应,这对您的用户体验不利.)


Jac*_*ack 5

您可以将 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);
    });

}
Run Code Online (Sandbox Code Playgroud)