Обработка ошибок AJAX с помощью jQuery: следует ли использовать $.ajaxSetup() или $.fn.ajaxError()
Я хочу предупредить пользователя, когда есть ошибка AJAX. Вы можете сделать это через $.ajaxSetup
:
$.ajaxSetup({
error: function() {
alert("OOPS!")
}
});
Но документы jQuery рекомендуют против этого:
Примечание. Глобальные функции обратного вызова должны быть установлены с их соответствующими глобальными Обработчик событий Ajax методы-.ajaxStart(),.ajaxStop(),.ajaxComplete(),.ajaxError(),.ajaxSuccess(),.ajaxSend() - скорее чем в объекте настроек для $.ajaxSetup().
Поэтому я предполагаю, что я должен это сделать:
$("#some_random_div").ajaxError(function() {
alert("OOPS!")
});
Это не имеет для меня никакого смысла: обратный вызов ошибки AJAX относится к моему приложению в целом, а не к определенному элементу страницы. Итак, почему функция обратного вызова должна быть связана с отдельным элементом страницы?
Итак: почему документы jQuery рекомендуют использовать то, что выглядит как менее читаемый подход и какой подход лучше?
Ответы
Ответ 1
Типичное использование заключается в том, что конкретный элемент страницы, с которым вы связываете ajaxError, - это div, где будет отображаться ваше сообщение об ошибке; возможно, "flash" message div в верхней части страницы. Таким образом, у вас есть прямой доступ к этому div для добавления вашего сообщения.
Но если вы не используете какой-либо конкретный элемент DOM в качестве области отображения сообщений, вы можете привязать его к $(document)
или другому глобальному элементу.
Ответ 2
Состояние документов:
Как и в jQuery 1.8, метод .ajaxError() должен быть привязан только к документу.
http://api.jquery.com/ajaxError/
Ответ 3
Вы можете подключить функцию ошибки ко всему телу следующим образом:
$('body').ajaxError(function() {
alert("OOPS!")
});
Ответ 4
Могут существовать обстоятельства, при которых он может относиться к отдельному элементу управления - например, когда у вас есть автозаполнение, которое совершает круглые поездки в базу данных через ajax, в отличие от всей страницы, например, на отправке. Затем это определит, хотите ли вы изолировать ошибку на компоненте страницы, и если да, то какой ответ на ошибку должен быть, а не с более общим подходом.