Понимание jqXHR в jQuery

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть набор $.get() запросов, которые мне нужно реорганизовать, чтобы включить обратный вызов с ошибкой. Запросы имеют вид

 $.get(url,
      {},
      function(data) {//success, do work
      //work
      },'json');//or 'html'
  

Согласно API jQuery, я просто добавляю объект jqHXR. Итак, в моем случае, я считаю, что я должен сделать

 var jqxhr =  $.get(url,
          {},
          function(data) {//success, do work
          //work
          },'json').error(function() { alert("error"); });//or 'html'
  

Я не понимаю причину второго успешного обратного вызова в примере. Я полагаю, это может быть для настройки цепочки обратного вызова. Я хочу, чтобы ошибка выполнялась с ошибкой, а успех выполнялся при успешном выполнении. Итак, это правильно?

Комментарии:

1. Какой пример на странице? Извините, я не смог найти то, что вы имеете в виду.

2. похоже на 3-й пример кода.

3. Когда вы перейдете на страницу, найдите раздел под названием «Объект jqXHR». Я имею в виду пример, приведенный непосредственно под этим заголовком.

Ответ №1:

Я думаю, что второй успешный обратный вызов в примере предназначен только для иллюстрации того, что, используя этот синтаксис, вы можете иметь несколько обработчиков для success , error , и complete событий. В стандартном .ajax() методе jQuery вы можете назначить только один обработчик для каждого из этих событий. Я не могу сразу придумать пример, который потребовал бы нескольких обработчиков, но он кажется немного понятнее и больше похож на стандартную идиому jQuery для использования

 $.get('my_url.php')
    .success(handlerOne)
    .success(handlerTwo);
  

вместо

 $.get('my_url.php', function(data, textStatus, jqXHR) {
    handlerOne(data, textStatus, jqXHR);
    handlerTwo(data, textStatus, jqXHR);
});
  

В вашем случае, однако, может быть проще и чище просто преобразовать ваши $.get() операторы в $.ajax() . $.ajax() Синтаксис, вероятно, более знаком большинству программистов jQuery, и поскольку вам не нужны специальные функциональные возможности (несколько обработчиков, назначение обработчика после запроса), доступные в другом синтаксисе, нет причин просто не использовать $.ajax() :

 $.ajax({
    url: url,
    success: function(data) {
        // success, do work
    },
    error: function(data) {
        // error, handle failure
    },
    dataType:'json'
});
  

Комментарии:

1. Я согласен, второй вариант имеет гораздо больше смысла.

2. Я нахожу четкие объяснения, подобные вашим, как правило, редки. Документация API и официальные сайты, как правило, очень подробно описывают все, что имеет свое место, но они не подчеркивают практичность или рекомендуемые варианты так четко. Они также, как правило, дают абстракции без примеров, которые охватывают достаточно много.

3. Для тех, кто наткнулся на этот ответ: «Уведомление об устаревании: обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() удалены с jQuery 3.0. Вместо этого вы можете использовать jqXHR.done(), jqXHR.fail() и jqXHR.always()» . ( api.jquery.com/jQuery.ajax )

Ответ №2:

На этой странице есть много документации о том, чем jqXHR (jQuery XHR) отличается от XHR (XMLHttpRequest).

http://api.jquery.com/jQuery.ajax/#jqXHR

Ответ №3:

Код, который вы используете, должен быть в порядке. Второй успех — это просто еще одно место, где вы можете определить метод успеха. Некоторые люди используют jqxhr success вместо переданного $.get() , а другие используют обработчик done отложенного объекта для выполнения того же самого.

Комментарии:

1. множество способов выполнения действий в javascript и неявное молчание об альтернативном синтаксисе — самая запутанная часть изучения js для меня.

2. @gwho лучшее решение для этого — перейти к исходному коду. Часто документации просто недостаточно

3. Я нахожу источник еще более запутанным из-за метапрограммирования, и по той же причине объяснения API сбивают с толку. Я думаю, что хорошие четкие примеры, которые удаляют детали и оставляют вас с основными важными и наиболее распространенными аспектами, — это наиболее легко усваиваемый способ передачи информации. Это только мое мнение. Я считаю, что если вы можете прочитать исходный код, вы уже достаточно хороши, чтобы не путаться в множественном синтаксисе.

4. @ahnbizcad Это хорошее объяснение jXHR: sitepoint.com/jqxhr-object