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. Благодаря
Ответы
Ответ 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.
Подробнее см. мой пост в блоге.