Статьи

jQuery 1.9+ .Ajax () Новые преимущества интерфейса Promise

Исходя из 5 NEW JQUERY.AJAX () ПРИМЕРЫ JQUERY 1.9+ , я хотел задокументировать изменения (некоторые из них можно отнести к числу преимуществ) использования интерфейса обещаний для jQuery .Ajax () 1.9+.

  • Именование — Очевидно, что имена изменились с успехом -> сделано, ошибка -> не удалось, завершить -> всегда.
  • Отложенный — отложенные обещания могут быть привязаны к любому месту в вашем приложении, обеспечивая гибкость и возможность повторного использования.
  • Порядок обратных вызовов — они вызываются в следующем порядке: 1 сбой, 2 выполнено, 3 всегда. Стандарт.
  • Mutiples — Вы можете указать любое количество обратных вызовов одного типа. т.е. .always (), .always (), .always (), которые все будут запущены после завершения запроса ajax.
  • аргументы
  • Цепочка — Начиная с jQuery 1.8, вы можете связывать вызовы ajax с помощью функции .then (). Смотрите ниже, например.
  • Объединение. Вы можете объединить .done () и .error () в .then (). Смотрите ниже, например.
//old complete function
complete Function( jqXHR jqXHR, String textStatus )

//new done function
jqXHR.done(function(data, textStatus, jqXHR) {});

Источник: jQuery.Ajax API

Не стесняйтесь оставлять комментарии, если вы найдете больше я пропустил.

Объедините .done () и .fail () в .then ()

Вы можете объединить функции done () и fail () в одной функции then (). Код выше можно переписать так:

 var promise = $.ajax({
  url: "/myServerScript"});
 
promise.then(mySuccessFunction, myErrorFunction);

Источник: Отложено и обещают в jQuery

Цепочка Ajax Requests

Начиная с jQuery 1.8, вы можете последовательно соединять функцию then (). В приведенном ниже коде выполняется первый обещание1, и при успешном разрешении запускается getStuff, возвращая обещание, а после успешного разрешения выполняется анонимная функция.

 var promise1 = $.ajax("/myServerScript1");
 
function getStuff() {
    return $.ajax("/myServerScript2");}
 
promise1.then(getStuff).then(function(myServerScript2Data){
  // Both promises are resolved});
Every callback function receives the result of the previous asynchronous function, in the case of Ajax, that would be the returned data.

Использование .when () в качестве обещания

Вы можете использовать .when () для выделения функции обратного вызова обещания, а именно .done ().

 var container = $("#mycontainer");
$.when(
    function () {
        return $.Deferred(function (dfd) {
            container.fadeOut('slow', dfd.resolve);
        }).promise();
    }(),
    $.ajax({
        url: 'Path/To/My/Url/1',
        type: 'POST',
        dataType: 'json'
    }),
    $.ajax({
        url: 'Path/To/My/Url/2',
        type: 'POST',
        dataType: 'json'
    })
).done(function (x, data) {
    container.html('Your request has been processed!');
    container.fadeIn('slow');
});

Как видите, мы передаем три обещания $ .when, одно для анимации затухания и два для операций ajax.

* Первый параметр — это самозаполняющаяся анонимная функция, которая создает отложенный обработчик и возвращает обещание. В обратном вызове $ .Deferred функция dfd.resolve передается параметру обратного вызова fadeOut (), что означает, что после завершения анимации будет разрешено отложенное выполнение.
* Что касается двух других параметров, то мы передаем $ .when, поскольку результатом $ .ajax является объект jqXHR, который реализует Promise, мы просто передаем значение, которое возвращается как есть.

Источник: Всегда держите свои (jQuery) обещания