#javascript #extjs #extjs4 #extjs-mvc
#javascript #extjs #extjs4 #extjs-mvc
Вопрос:
У меня есть ситуация, когда я делаю 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
.
Спасибо
Ответ №1:
В начале вашего приложения вставьте следующий фрагмент. При этом КАЖДЫЙ ответ, будь то из хранилища, формы или …, будет проверен и перенаправлен на страницу входа.
Ext.Ajax.on('requestexception', function (conn, response, options) {
if (response.status === 403) {
window.location = 'login';
}
});
Комментарии:
1. забавно, мы оба отвечали на этот вопрос одновременно, и оба дали один и тот же ответ. Так что это должно быть правильно.
2. В яблочко! Большое вам спасибо
Ответ №2:
Я не совсем уверен, что это будет перехватывать все запросы ajax, но предполагая, что вы используете AjaxProxy для всех сообщений с сервером, это должно сработать: обработайте событие ‘requestexception’ во внешнем.Ajax singleton что-то вроде этого
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()
. Это должен быть более полный универсальный обработчик.
Смотрите больше деталей в моем сообщении в блоге.
Комментарии:
1. Ext.util. Observable.observe не является функцией в Ext JS 5.x. Вы должны использовать Ext.Ajax.on
2. Нет, вы этого не делаете, и да, в Ext JS 5.0.1
typeof Ext.util.Observable.observe
будут выводиться"function"