Я хотел бы зарегистрировать глобальный обработчик событий для всех запросов AJAX, чтобы я мог перехватывать и обрабатывать ответы от сервера до того, как конкретный обработчик событий их получит.
Например, мой код может иметь что-то вроде:
$("#placeholder").load("/fragments/userpics");
И я хотел бы зарегистрировать обработчик события «до», чтобы я мог, например, отобразить окно входа в систему, если возвращается ответ 401, или, возможно, повторить попытку, если есть ответ 503.
Я думал, что $.ajaxError()
- это то, где я хотел бы сделать что-то подобное, но, очевидно, это срабатывает только после обработчика события.
ОБНОВЛЕНИЕ : Хорошо, вот что я получил, с помощью @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);
};
});
После некоторого тестирования похоже, что мне также нужно переопределить options.complete
.
Однако это не распространяется на все базы, поскольку вы также можете прикреплять события непосредственно к объекту jqXHR, и изменение options
в этом случае не поможет.
Любые советы?