EXT JSで同期ajaxリクエストを行うにはどうすればよいですか?
たとえば、次のコードがあるとします。
_test1();
ajaxRequest(); //Ajax Request
test2();
_
Test2関数は、_Ext.Ajax.request
_呼び出しがあるajaxRequest()
の実行を終了せずに実行されます。
text2()
関数が実行された後にのみajaxRequest()
を実行させるにはどうすればよいですか?
これを行う1つの方法は、コールバックで_test2
_関数を呼び出すことであることを理解していますが、いくつかの依存関係と、ajaxリクエストの後に同期的に実行する必要のある多くのコードがあります。最善の解決策を教えていただけますか?
似たようなものが必要で、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
属性は文書化されていないようです。したがって、...もちろん...将来のリリースで変更される可能性があることに注意してください。
_Extjs.Ajax
_では、各AJAX呼び出しは、次の3種類のコールバック関数のいずれかになります。
success
AJAX呼び出しが正常に作成され、応答を受け取った場合に実行されますfailure
AJAX呼び出しが応答を取得できない場合に実行されますcallback
Ajaxリクエストの終了後にtest2();
を実行する場合は、
次に、_test2
_関数をsuccess
、failure
、または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では機能しません。
ExtJSは、すぐに使用できる同期要求機能を提供していません。実際、彼らはそれらを使用することを強く推奨していません。
以下 ディスカッションが役立つ場合があります。