web-dev-qa-db-ja.com

EXTJs同期ajaxリクエスト

EXT JSで同期ajaxリクエストを行うにはどうすればよいですか?

たとえば、次のコードがあるとします。

_test1();
ajaxRequest(); //Ajax Request
test2();
_

Test2関数は、_Ext.Ajax.request_呼び出しがあるajaxRequest()の実行を終了せずに実行されます。

text2()関数が実行された後にのみajaxRequest()を実行させるにはどうすればよいですか?

これを行う1つの方法は、コールバックで_test2_関数を呼び出すことであることを理解していますが、いくつかの依存関係と、ajaxリクエストの後に同期的に実行する必要のある多くのコードがあります。最善の解決策を教えていただけますか?

13
Jemsworld

似たようなものが必要で、Ext.Ajax.request()と_Ext.data.Connection_のソースコードを調べたところ、request()メソッドでasync属性をチェックしていることがわかりました。 、したがって、実際には次のように同期要求を行うことができます。

_var response = Ext.Ajax.request({
    async: false,
    url: 'service/url'
});
var items = Ext.decode(response.responseText);
_

このasync属性は文書化されていないようです。したがって、...もちろん...将来のリリースで変更される可能性があることに注意してください。

27
Redder

_Extjs.Ajax_では、各AJAX呼び出しは、次の3種類のコールバック関数のいずれかになります。

  • success AJAX呼び出しが正常に作成され、応答を受け取った場合に実行されます
  • failure AJAX呼び出しが応答を取得できない場合に実行されます
  • AJAX呼び出しが応答を取得した後に実行されるcallback

Ajaxリクエストの終了後にtest2();を実行する場合は、
次に、_test2_関数をsuccessfailure、またはcallback関数内に配置します。どちらを選ぶかはあなた次第です...

successまたはfailure関数の詳細については、 ここ を参照してください。

_test1();
Ext.Ajax.request({
    url: 'page.php',
    params: {
        id: 1
    },
    // scope: this, // you can set the scope too
    callback: function(opt,success,respon){
        test2();
    } 
});
_

注:この方法はExtJS3では機能しません。

11

ExtJSは、すぐに使用できる同期要求機能を提供していません。実際、彼らはそれらを使用することを強く推奨していません。

以下 ディスカッションが役立つ場合があります。

4
Li0liQ