EXTJS 4 - Глобальный слушатель исключений - PullRequest
26 голосов
/ 04 ноября 2011

У меня есть ситуация, когда я делаю 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 это может быть одна строка.

Спасибо

Ответы [ 3 ]

28 голосов
/ 06 ноября 2011

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

Ext.Ajax.on('requestexception', function (conn, response, options) {
    if (response.status === 403) {
        window.location = 'login';
    }
});
7 голосов
/ 06 ноября 2011

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

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

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

6 голосов
/ 26 ноября 2014

Более полное решение, в котором это будет всеобъемлющее, таково:

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().Это должен быть более полный всеобъемлющий обработчик.

Подробнее см. В моем блоге.

...