JQuery ajax() с успехом, ошибкой и полным vs .done(),.fail() и always()

Вопросы:

  • Должны ли мы изменить наше кодирование, как предложено ниже?
  • Есть ли разница между .done() и success:, .fail() и error: и .always() и complete:?

Преамбула:

Я собирал вызов jQuery.ajax, который я успешно сделал и в прошлом. Что-то вроде этого:

    $.ajax(
    {
        url: someUrl,
        type: 'POST',
        data: someData,
        datatype: 'json',
        success: function (data) { someSuccessFunction(data); },
        error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }
    });

Внимательно просмотрев некоторую документацию, я наткнулся на ссылку, в которой утверждается, что успешные, ошибочные и полные обратные вызовы устарели от jQuery 1.8. Чтобы подготовить код для их возможного удаления, используйте вместо него jqXHR.done(), jqXHR.fail() и jqXHR.always().

Поэтому мы должны начать кодирование чего-то вроде этого:

$.ajax( "example.php" )
    .done(function (data) { someSuccessFunction(data); })
    .fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); })
    .always(function() { alert("complete"); });

Ответ 1

Хорошо, что в этой конкретной ситуации нет преимущества.

Точка методов .done() .fail() .always() заключается в том, что вы можете

  • Прикрепить несколько обработчиков
  • Делайте это везде, а не только при вызове $.ajax

Если вы находитесь на веб-узле $.ajax, где есть только отдельные обработчики, то эти преимущества действительно не вступают в игру.

Итак, вы можете вернуть обещание, а другие могут присоединить своих обработчиков.

Пример обновления плагинов после запроса ajax:

$.ajaxPrefilter(function(opt, origOpt, jqxhr) {
    jqxhr.always(function() {
        $("[data-plugin]").plugin();
    });
});