2011-11-04 12 views
25

私は、管理領域のさまざまなExt Gridパネルなどからサーバーにajaxリクエストを行っている状況があります。ログインしているユーザは、例えばアクティビティがない場合にログアウトされます。正常な5分。この場合、サーバはログインページにリダイレクト403を送り返す。少しやり過ぎであるすべてのストアのプロキシにEXTJS 4 - グローバル例外リスナー

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

: は、今私が挿入しています。
誰かが親切で、ExtJSとサーバー間のすべての通信にリスナーを追加する方法を教えてください。私はMVCアプリケーションアーキテクチャを使用しているので、おそらくcontroller.jsまたはapp.jsの1つのライナーになる可能性があります。おかげで

答えて

28

あなたのアプリの冒頭に次のスニペットを挿入します。このEVERYのレスポンスは、店舗かフォームかに関係なく、チェックされ、ログインページにリダイレクトされます。

私は、これはすべてのAJAX要求をキャッチしていますが、それは動作するはずのサーバとのすべての通信のためのAjaxProxyを使用していると仮定するかどうか本当にわからないんだけど
Ext.Ajax.on('requestexception', function (conn, response, options) { 
    if (response.status === 403) { 
     window.location = 'login'; 
    } 
}); 
+1

面白いで詳細を参照してください、私たちの両方が同時にこの質問に答えるし、両方が同じ答えを与えています。それで正しいはずです。 – nightwatch

+0

ブルズアイ!ありがとうございました –

+0

nice、thanksありがとう – pylover

7

: Ext.Ajaxシングルトンの「requestexception」イベントを処理この

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

よう 何かが、私はそれを試していませんが、あなたがしなければ、あなたはここでアップデートを投稿できますか?それはキャッチオールなり前記

+0

@Sascha、nightwatchお二人ともおかげさまです。それはうまく動作します。 – user798612

6

より完全なソリューションは、このです:

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

これは、基本となるクラス、Ext.data.ConnectionExt.Ajaxだけでなく使用されているためであるが、同様に使用されているExt.data.ProxyExt.data.Store, Ext.data.Model。これは、store.load()model.save()のようなコールの例外を処理します。より完全なキャッチオールハンドラでなければなりません。

my blog post.

+0

Ext.util.Observable.observeはExt JS 5.xの関数ではありません。 Ext.Ajax.onを使用する必要があります – jprism

+0

いいえ、Ext JS 5.0.1では 'typeof Ext.util.Observable.observe'は' 'function" 'を出力します – EricLavault