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.