jQuery ajax () з використанням успіху, помилки та завершення проти .done (), .fail () та always ()


75

Питання :

  1. Чи повинні ми змінити кодування, як запропоновано нижче?
  2. Чи є різниця між .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
я віддаю перевагу другому методу ... де використовується обіцянка, повернута ajax
Arun P Johny

8
Зворотні дзвінки не застаріли. Пов'язаними методами для об'єкта jqxhr є.

Я погоджуюсь з Арун, також я думаю, що це особисто легше читати
Півень

1
Я не шукаю коментарів та тверджень щодо переваг, але хотів би зрозуміти відмінності, якщо вони є.
PostureOfLearning

14
Для тих, хто не знає, що таке об'єкти jqxhr, що означає "Шалений поїзд" під "зворотними викликами не є застарілими. Відповідні методи в об'єкті jqxhr". це те, що .done()замінює .success(), .fail()замінює .error()та .always()замінює .complete(). В .success(), .error()і .complete() методи відрізняються від success, errorі complete параметрів для .ajax()методу.
ahnbizcad

Відповіді:


38

Ну, в цій конкретній ситуації немає переваги робити це.

Суть .done() .fail() .always()методів полягає в тому, що ви можете

  1. Приєднайте кілька обробників
  2. Робіть це де завгодно, а не лише під час дзвінка $.ajax

Якщо ви знаходитесь на сайті $.ajaxвиклику, приєднуючи лише одних обробників, то ці переваги насправді не вступають у дію.

Тож ви можете повернути обіцянку, а інші можуть долучити своїх власників.

Прикладом є оновлення плагінів після запиту ajax:

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

4
FYI - Згідно з документами станом на jQuery 1.5 complete, errorі successналаштування приймають масив функцій зворотного виклику, тому ви можете підключити кілька обробників.
user9645

1
для №2: де ще б ці методи використовувались окрім виклику $.ajax()? Чи працюють ці методи лише на приймачах jqxhr?
ahnbizcad
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.