javascript extjs extjs4 extjs-mvc

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.