2011-11-04 16 views
25

Tengo una situación en la que hago solicitudes ajax a un servidor desde varios paneles Ext Grid, 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 una:EXTJS 4 - Oyente de excepción global

listeners:{ 
    exception: function(proxy, response, operation, eOpts) { 
     if(response.status == '403') 
     window.location = 'login'; 
    } 
} 

proxy de cada tienda, 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 utilizando la arquitectura de aplicación MVC, por lo que probablemente podría ser un trazador de líneas en el controller.js o app.js. Gracias

Respuesta

28

Al principio 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'; 
    } 
}); 
+1

divertido, que ambos estaban respondiendo a esta pregunta, al mismo tiempo y ambos han dado la misma respuesta. Entonces debe ser correcto. – nightwatch

+0

¡Ojo de buey! Muchas gracias –

+0

nice, muchísimas gracias – pylover

7

No estoy muy seguro de si esto va a coger todas las peticiones Ajax, pero asumiendo que usted está utilizando AjaxProxy para todas las comunicaciones con el servidor debería funcionar: controlar el evento 'requestexception' en el singleton Ext.Ajax algo como esto

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

yo no lo he probado, pero si lo hace, ¿podría enviar una actualización aquí?

+0

@Sascha, nightwatch Gracias a los dos. Funciona bien. – user798612

6

Una solución más completa, en la que va a ser un cajón de sastre es la siguiente:

Ext.util.Observable.observe(Ext.data.Connection, { 
    requestexception: function(conn, response, options) { 
     if(response.status == '403') 
      window.location = 'login'; 
    } 
}); 

Esto se debe a la clase subyacente, Ext.data.Connection se utiliza no sólo en Ext.Ajax pero así como la Ext.data.Proxy que se usa por Ext.data.Store, Ext.data.Model. Esto maneja excepciones en llamadas como store.load() y model.save(). Este debería ser un controlador catch-all más completo.

ver más detalles en my blog post.

+0

Ext.util.Observable.observe no es una función en Ext JS 5.x. Tienes que usar Ext.Ajax.on – jprism

+0

No, no, y sí en Ext JS 5.0.1 'typeof Ext.util.Observable.observe' generará' 'función" ' – EricLavault