Подтвердить что ты не робот

EXTJS 4 - Глобальный прослушиватель исключений

У меня есть ситуация, когда я делаю запросы ajax на сервер с различных панелей Ext Grid и т.д. в области администратора. Зарегистрированный пользователь будет выведен из системы, если нет активности, например. 5 минут, что нормально. В этом случае сервер отправляет обратно перенаправление 403 на страницу входа. Прямо сейчас я вставляю:

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

для каждого прокси-сервера Store, который немного переборщит.
Может ли кто-нибудь быть достаточно любезен и дать мне знать, как я мог бы добавить слушателя ко всем сообщениям между ExtJS и сервером? Я использую архитектуру приложений MVC, поэтому, возможно, это один лайнер в контроллере .js или app.js. Благодаря

4b9b3361

Ответ 1

В начале вашего приложения вставьте следующий фрагмент. С помощью этого КАЖДЫЙ ответ, будет ли он из магазина или формы или..., будет проверен и перенаправлен на страницу входа.

Ext.Ajax.on('requestexception', function (conn, response, options) {
    if (response.status === 403) {
        window.location = 'login';
    }
});

Ответ 2

Я не уверен, что это поймает все запросы ajax, но предположив, что вы используете AjaxProxy для всей связи с сервером, он должен работать: обрабатывать событие requestexception в синтаксисе Ext.Ajax что-то вроде этого

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

Я не пробовал, но если вы это сделаете, не могли бы вы разместить здесь обновление?

Ответ 3

Более полное решение, в котором это будет уловкой:

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(). Это должен быть более полный обработчик catch-all.

Подробнее см. мой пост в блоге.