Подтвердить что ты не робот

Обработка ошибок 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 рекомендуют использовать то, что выглядит как менее читаемый подход и какой подход лучше?

4b9b3361

Ответ 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, в отличие от всей страницы, например, на отправке. Затем это определит, хотите ли вы изолировать ошибку на компоненте страницы, и если да, то какой ответ на ошибку должен быть, а не с более общим подходом.