Desidero registrare un gestore di eventi globale per tutte le richieste AJAX, in modo da poter intercettare e gestire le risposte dal server prima del al gestore di eventi specifico.Come posso intercettare le risposte ajax in jQuery prima del gestore eventi?
Per esempio, il mio codice potrebbe avere qualcosa di simile:
$("#placeholder").load("/fragments/userpics");
e mi piacerebbe registrare un gestore di "prima" evento in modo che ho potuto, ad esempio, visualizzare una finestra di login se una risposta 401 viene restituito, o forse riprovare se c'è una risposta 503.
Ho pensato che $.ajaxError()
è dove vorrei fare qualcosa di simile, ma a quanto pare è attivato solo dopo il gestore di eventi.
UPDATE: OK, ecco quello che ho ottenuto finora, con l'aiuto di @genesis:
$.ajaxPrefilter(function(options, originalOptions, jqXHR) {
var success = options.success;
options.success = function(data, textStatus, jqXHR) {
// override success handling
if(typeof(success) === "function") return success(data, textStatus, jqXHR);
};
var error = options.error;
options.error = function(jqXHR, textStatus, errorThrown) {
// override error handling
if(typeof(error) === "function") return error(jqXHR, textStatus, errorThrown);
};
});
Dopo aver fatto qualche test, sembra che io avrei anche bisogno di sovrascrivere options.complete
.
Tuttavia, questo non copre ancora tutte le basi, poiché è anche possibile allegare eventi direttamente all'oggetto jqXHR e in questo caso non è possibile modificare options
.
Qualche consiglio?
http://stackoverflow.com/a/10796951/1509853? – oCcSking