3

我正在使用 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);
}
4

2 回答 2

6

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

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

function func(param) {
   // Other stuff
   $.ajax({
      success: func(param2)
   })
}

不过要小心无限循环,因为您调用的是同一个函数。查看该方法的 jQuery 源代码并了解它们如何处理回调可能是值得的ajax(),并以类似的方式编写您的方法,因此您最终可能会得到如下内容:

main() {
   func(param1, {success: func(param2)});
}

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

于 2013-02-19T18:59:07.240 回答
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);
    });

}
于 2013-02-19T19:01:22.240 回答