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呼び出しを順番に呼び出すことはできません。

代わりに、呼び出しでコールバック関数を利用する必要があり$.ajax()ます。あなたはこのようなものになってしまうでしょう:

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

ただし、同じ関数を呼び出しているので、無限ループに注意してください。メソッドのjQueryソースを調べて、ajax()それらがコールバックをどのように処理するかを確認し、同様の方法でメソッドを作成すると、次のようになる可能性があります。

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

(注:falseに設定できる設定がありますが、IMOでは、AJAXとコールバックがどのように機能するかをよく理解することをお勧めします。これは、意図した動作に逆らうのではなく、意図した動作で作業するためです$.ajax()asyncこれにより、長期的には頭痛の種を減らすことができます。さらに、大規模な同期AJAX呼び出しにより、サイトが応答しなくなる可能性があり、ユーザーエクスペリエンスに悪影響を及ぼします。)

于 2013-02-19T18:59:07.240 に答える
5

関数へのアクセスを可能にする遅延としてajax呼び出しを返すことができますdonehttp://api.jquery.com/category/deferred-object/

ajaxの詳細については、Shaunaの回答を確認してください。

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 に答える