Я хотел бы зарегистрировать глобальный обработчик событий для всех запросов AJAX, чтобы я мог перехватывать и обрабатывать ответы с сервера до того, как их обработает обработчик конкретных событий.
Например, мой код может иметь что-то вроде:
$("#placeholder").load("/fragments/userpics");
И я хотел бы зарегистрировать обработчик событий "before", чтобы я мог, например, отобразить окно входа, если возвращается ответ 401, или, возможно, повторить попытку, если есть ответ 503.
Я думал, что $.ajaxError()
- это то, где я бы сделал что-то подобное, но, по-видимому, это вызвано только после обработчиком событий.
UPDATE: ОК, вот что я получил до сих пор, с помощью @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
в этом случае не поможет.
Любые советы?