Chciałbym zarejestrować globalną procedurę obsługi zdarzeń dla wszystkich żądań AJAX, tak aby móc przechwytywać i obsługiwać odpowiedzi z serwera przed konkretną obsługę zdarzenia.Jak mogę przechwytywać odpowiedzi ajax w jQuery przed obsługą zdarzenia?
Na przykład, mój kod może mieć coś takiego:
$("#placeholder").load("/fragments/userpics");
I chciałbym, aby zarejestrować „przed” obsługi zdarzenia tak, że mógłby, na przykład, wyświetlić okno logowania jeśli odpowiedzią 401 jest zwracana, lub może spróbować ponownie, jeśli istnieje odpowiedź 503.
Pomyślałem, że $.ajaxError()
jest, gdzie chciałbym zrobić coś takiego, ale najwyraźniej jest uruchamiany tylko po obsługi zdarzeń.
UPDATE: OK, oto co mam do tej pory, za pomocą @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);
};
});
Po wykonaniu niektórych badań, wygląda na to, że również trzeba zastąpić options.complete
.
Jednak nadal nie obejmuje to wszystkich baz, ponieważ można również dołączać zdarzenia bezpośrednio do obiektu jqXHR, a zmiana options
nie pomoże w tym przypadku.
Jakieś wskazówki?
http://stackoverflow.com/a/10796951/1509853? – oCcSking