Должен ли я использовать .done() и .fail() для нового кода jQuery AJAX вместо успеха и ошибки

Я закодировал вот так:

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID },
    success: function (data) {
        $('#CityID').html(data);
    },
    error: function (ajaxContext) {
        alert(ajaxContext.responseText)
    }
});

Но когда я смотрю на jQuery .ajax() документация в конце, кажется, что я должен кодировать, как это ниже или по крайней мере он предлагает добавить .done() и a .fail():

var request = $.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
});

request.done(function (data) {
    xxx;
});
request.fail(function (jqXHR, textStatus) {
    xxx;
});

Обновление

Если я код, как это, это то же самое или есть ли какое-то преимущество, чтобы разбить его на три?

$.ajax({ cache: false,
    url: "/Admin/Contents/GetData",
    data: { accountID: AccountID }
}).done(function (data) {
    xxx;
}).fail(function (jqXHR, textStatus) {
    xxx;
});

Ответ 1

Как указано пользователем2246674, использование success и error в качестве параметра функции ajax действительно.

Чтобы соответствовать прецедентному ответу, прочитайте документ:

Уведомление об отставке:

Обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() будут устаревать в jQuery 1.8. Чтобы подготовить код для их возможного удаления, используйте вместо него jqXHR.done(), jqXHR.fail() и jqXHR.always().

Если вы используете функцию обратного вызова (используя, например, метод-цепочку), используйте .done(), .fail() и .always() вместо success(), error() и complete().

Ответ 2

Я хочу добавить что-то на пост @Michael Laffargue:

jqXHR.done() быстрее!

jqXHR.success() имеют некоторое время загрузки в обратном вызове и иногда могут превышать script. Я нахожу это раньше.

UPDATE:

Используя jqXHR.done(), jqXHR.fail() и jqXHR.always(), вы можете лучше манипулировать с помощью ajax-запроса. В общем случае вы можете определить ajax в некоторой переменной или объекте и использовать эту переменную или объект в любой части вашего кода и быстрее получать данные. Хороший пример:

/* Initialize some your AJAX function */
function call_ajax(attr){
    var settings=$.extend({
        call            : 'users',
        option          : 'list'
    }, attr );

    return $.ajax({
        type: "POST",
        url: "//exapmple.com//ajax.php",
        data: settings,
        cache : false
    });
}

/* .... Somewhere in your code ..... */

call_ajax({
    /* ... */
    id : 10,
    option : 'edit_user'
    change : {
          name : 'John Doe'
    }
    /* ... */
}).done(function(data){

    /* DO SOMETHING AWESOME */

});

Ответ 3

Простыми словами

$.ajax("info.txt").done(function(data) {
  alert(data);
}).fail(function(data){
  alert("Try again champ!");
});

если он получит info.text, тогда он будет предупреждать и любую функцию, которую вы добавляете, или если какой-либо способ не может получить информацию .text с сервера, а затем функцию предупреждения или ошибки.