javascript - EXTJS 4-Oyente de excepción global
extjs4 extjs-mvc (3)
Al comienzo de su aplicación, inserte el siguiente fragmento. Con esta CADA respuesta, ya sea de una tienda o un formulario o ..., se comprobará y se redirigirá a la página de inicio de sesión.
Ext.Ajax.on(''requestexception'', function (conn, response, options) {
if (response.status === 403) {
window.location = ''login'';
}
});
Tengo una situación en la que hago solicitudes ajax a un servidor desde varios gridpanel Ext, etc. En un área de administración.
El usuario conectado se cerrará la sesión si no hay actividad para, por ejemplo. 5 minutos, lo cual es normal.
En este caso, el servidor envía una redirección 403 a la página de inicio de sesión.
En este momento estoy insertando un:
listeners: {
exception: function(proxy, response, operation, eOpts) {
if (response.status == ''403'')
window.location = ''login'';
}
}
Para store''s proxy de cada store''s que es un poco exagerado.
¿Podría alguien ser tan amable y decirme cómo podría agregar un oyente a todas las comunicaciones entre ExtJS y el servidor?
Estoy usando la arquitectura de la aplicación MVC por lo que probablemente podría ser un trazador de líneas en el controller.js o app.js
Gracias
No estoy seguro de si esto atrapará todas las solicitudes de Ajax, pero suponiendo que está usando AjaxProxy para todas las comunicaciones con el servidor, debería funcionar: manejar el evento ''requestexception'' en el singleton Ext.Ajax, algo así como esto
Ext.Ajax.on(''requestexception'', function(conn, response, options, eOpts) {
//your error handling here
});
No lo he probado, pero si lo hace, ¿podría publicar una actualización aquí?
Una solución más completa, en la que será un catch-all es esta:
Ext.util.Observable.observe(Ext.data.Connection, {
requestexception: function(conn, response, options) {
if(response.status == ''403'')
window.location = ''login'';
}
});
Esto se debe a que la clase subyacente, Ext.data.Connection , se utiliza no solo en Ext.Ajax sino también en Ext.data.Proxy que se utiliza en Ext.data.Store, Ext.data.Model . Esto maneja excepciones en llamadas tales como store.load() y model.save() . Este debería ser un controlador catch-all más completo.
Ver más detalles en mi blog.