Мой вопрос связан с удалением успеха функции, ошибки, завершения

#javascript #jquery

#javascript #jquery

Вопрос:

Я использую jQuery 3.x.x. Как упоминалось в примечании к выпуску jquery 3.x.x, метод success, complete, error удаляется. Я использую функцию успеха с jquery 3.x.x ajax. Моя функция успеха работает нормально, а не регистрирует ошибку в консоли. Для справки https://jquery.com/upgrade-guide/3.0/#breaking-change-special-case-deferred-methods-removed-from-jquery-ajax
Мой код здесь:

 <script src="jquery-3.3.1.js"></script>
<script>
$(document).ready(function() {
    $('#userName').click(function() {
        $.ajax({
            url : 'JqueryTest',
            data : {
                userName : $('#userName').val()
            },
            success : function(responseText) {
                alert(responseText);
                $('#ajaxGetUserServletResponse').text(responseText);
            }
        });
    }); 
});
</script>
  

Наконец, здесь работает функция успеха, вместо этого она должна регистрировать ошибку в консоли.

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

1. чего именно вы хотите?

2. Пожалуйста, опишите подробнее, в чем ваш вопрос.

Ответ №1:

Вы путаетесь между двумя разными вещами, которые имеют одно и то же имя.

В статье, на которую вы ссылались в вопросе, говорится:

Обратите внимание, что это никак не влияет на обратные вызовы ajax с тем же именем, передаваемые через объект options, которые продолжают существовать и не являются устаревшими. Это влияет только на методы jqXHR.

Когда вы пишете

 $.ajax({
  ...
  success : function(responseText) {
  }
});
  

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

Функции, которые были удалены, — это те, которые принадлежат Deferred классу объектов jQuery — это тип объекта, который возвращается $ajax() .

Так, например, если ваш код содержал что-то вроде этого:

 var deferredResponse = $.ajax({ 
  url: "http://www.example.com",
  method: "GET"
});

deferredResponse.success(function(response) {
  console.log(response);
});
  

… тогда функция «success» больше не будет работать в jQuery 3.0.

Вы можете обратиться к https://api.jquery.com/jQuery.ajax / чтобы увидеть, какие параметры в данный момент действительны для перехода $.ajax() , а также для https://api.jquery.com/category/deferred-object / чтобы узнать, какие методы в данный момент доступны для Deferred объекта.

Ответ №2:

Начиная с jQuery 3.0, success , error и complete был удален и заменен на done , fail и always , вот так:

 $.ajax( "example.php" )
  .done(function() {
    alert( "success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "complete" );
  });
  

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

1. Начиная с jQuery 3.0 ошибка успеха и завершения была удалена. но я использую success с jQuery 3.0. я получаю результат правильно. не ошибка. но почему…..

2. мой вопрос заключается в том, что успех был удален в jQuery 3.0.so не следует использовать success с jQuery 3.0, но success, который я уже использую с jQuery 3.0.почему ..?

3. метод success() был удален, но setting ajax() вызываемый for success по-прежнему доступен. Дополнительная информация: api.jquery.com/jQuery.ajax