2011-11-04 13 views
25

Ho una situazione in cui sto effettuando richieste Ajax a un server da vari pannelli Ext Grid ecc. In un'area di amministrazione. L'utente che ha effettuato l'accesso verrà disconnesso se non ci sono attività per es. 5 minuti che è normale. In questo caso il server invia un reindirizzamento 403 alla pagina di accesso. In questo momento sto l'inserimento di un:EXTJS 4 - Listener globale di eccezioni

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

alla procura di ogni Store, che è un po 'eccessivo.
Qualcuno potrebbe essere abbastanza gentile e fammi sapere come aggiungere un listener a tutte le comunicazioni tra ExtJS e il server? Sto usando l'architettura dell'applicazione MVC in modo che potrebbe probabilmente essere un unico liner nel controller.js o app.js. Grazie

risposta

28

All'inizio della tua app inserisci il seguente frammento. Con questa risposta EVERY, sia che si tratti di un negozio o di un modulo o ..., verrà controllato e reindirizzato alla pagina di accesso.

Ext.Ajax.on('requestexception', function (conn, response, options) { 
    if (response.status === 403) { 
     window.location = 'login'; 
    } 
}); 
+1

divertente, eravamo entrambi rispondere a questa domanda, allo stesso tempo ed entrambi hanno dato la stessa risposta. Quindi deve essere corretto. – nightwatch

+0

Bull's Eye! Grazie mille –

+0

nice, grazie mille – pylover

7

Io non sono davvero sicuro se questo prenderà tutte le richieste Ajax, ma supponendo che si sta utilizzando AjaxProxy per tutte le comunicazioni con il server dovrebbe funzionare: gestire l'evento 'requestexception' nel Singleton Ext.Ajax qualcosa di simile

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

non l'ho provato, ma se lo fai, potresti pubblicare un aggiornamento qui?

+0

@Sascha, nightwatch Grazie a tutti e due. Funziona bene. – user798612

6

Una soluzione più completa, in cui sarà un catch-all è questo:

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

Ciò è perché la classe sottostante, Ext.data.Connection viene utilizzato non solo in Ext.Ajax ma, nonche la Ext.data.Proxy che viene utilizzata per Ext.data.Store, Ext.data.Model. Gestisce le eccezioni su chiamate come store.load() e model.save(). Questo dovrebbe essere un gestore catch-all più completo.

Vedi i dettagli in my blog post.

+0

Ext.util.Observable.observe non è una funzione in Ext JS 5.x. Devi usare Ext.Ajax.on – jprism

+0

No, non lo fai, e sì in Ext JS 5.0.1 'typeof Ext.util.Observable.observe' restituirà output" function "' – EricLavault

Problemi correlati