Должен ли я использовать.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() и .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;
});

3 ответа

Решение

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

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

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

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

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

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

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

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

ОБНОВИТЬ:

С помощью 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 */

});

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

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

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

Когда мы собираемся перенести JQuery с 1.x на 2x или 3.x в нашем старом существующем приложении, тогда мы будем использовать.done,.fail вместо success,error, поскольку эти методы будут устаревшими. Например, когда мы вызываем веб-методы сервера, сервер возвращает объекты обещаний вызывающим методам (методы Ajax), и эти объекты обещаний содержат методы.done,.fail..etc. Следовательно, мы будем делать то же самое для успешных и неудачных ответов. Ниже приведен пример (он предназначен для запроса POST так же, как мы можем построить для типа запроса, такого как GET...)

 $.ajax({
            type: "POST",
            url: url,
            data: '{"name" :"sheo"}',
            contentType: "application/json; charset=utf-8",
            async: false,
            cache: false
            }).done(function (Response) {
                  //do something when get response            })
           .fail(function (Response) {
                    //do something when any error occurs.
                });
Другие вопросы по тегам