26

管理エリアで、ajaxさまざまなExtなどからサーバーにリクエストを送信している状況があります。gridpanel

ログインしているユーザーは、アクティビティがない場合、ログアウトされます。5分なら普通。

この場合、サーバー403はログイン ページにリダイレクトを返します。

今私は挿入しています:

listeners: {
    exception: function(proxy, response, operation, eOpts) {
        if (response.status == '403')
            window.location = 'login';
    }
}

store's少しやり過ぎのすべてのプロキシに。

ExtJS とサーバー間のすべての通信にリスナーを追加する方法を教えてください。

私は MVC アプリケーション アーキテクチャを使用しているので、おそらくcontroller.jsまたはのワンライナーである可能性がありapp.jsます。

ありがとう

4

3 に答える 3

28

アプリの先頭に、次のスニペットを挿入します。このすべての応答で、ストア、フォーム、または...からのものであるかどうかがチェックされ、ログインページにリダイレクトされます。

Ext.Ajax.on('requestexception', function (conn, response, options) {
    if (response.status === 403) {
        window.location = 'login';
    }
});
于 2011-11-05T21:33:35.723 に答える
7

これがすべてのajaxリクエストをキャッチするかどうかはわかりませんが、サーバーとのすべての通信にAjaxProxyを使用していると仮定すると、機能するはずです。Ext.Ajaxシングルトンの「requestexception」イベントを次のように処理します。

Ext.Ajax.on('requestexception', function(conn, response, options, eOpts) {
    //your error handling here
});

試したことはありませんが、試した場合は、ここに更新を投稿していただけますか?

于 2011-11-05T21:36:53.987 に答える
6

それがキャッチオールになるより完全なソリューションはこれです:

Ext.util.Observable.observe(Ext.data.Connection, {
    requestexception: function(conn, response, options) {
        if(response.status == '403')
            window.location = 'login';
    }
});

これは、基になるクラスExt.data.Connectionが で使用されるだけでExt.Ajaxなく、Ext.data.Proxyで使用される であるためExt.data.Store, Ext.data.Modelです。store.load()これは、やなどの呼び出しで例外を処理しますmodel.save()。これは、より完全なキャッチオール ハンドラーである必要があります。

詳細については、私のブログ投稿を参照してください。

于 2014-11-26T02:58:26.993 に答える