Подтвердить что ты не робот

JQuery.post().done() и успех:

jQuery документация по jQuery.post( )

// Assign handlers immediately after making the request,
// and remember the jqxhr object for this request
var jqxhr = $.post( "example.php", function() {
  alert( "success" );
})
  .done(function() {
    alert( "second success" );
  })
  .fail(function() {
    alert( "error" );
  })
  .always(function() {
    alert( "finished" );
});

// Perform other work here ...

// Set another completion function for the request above
jqxhr.always(function() {
  alert( "second finished" );
});

В чем разница между параметром success: и методом jqXHR.done( ); если его нет, какова вся точка метода jqXHR.done( )?

4b9b3361

Ответ 1

jQuery используется ТОЛЬКО для функций обратного вызова для success и error и complete.

Затем они решили поддерживать promises с помощью объекта jqXHR и что когда они добавили .done(), .fail(), .always() и т.д.... в духе API обещаний. Эти новые методы выполняют те же самые цели, что и обратные вызовы, но в другой форме. Вы можете использовать любой стиль API, который лучше подходит для вашего стиля кодирования.

Поскольку люди все больше знакомы с promises, и поскольку все больше и больше асинхронных операций используют эту концепцию, я подозреваю, что с течением времени все больше людей перейдут на API обещаний, но тем временем jQuery поддерживает оба.

Метод .success() устарел в пользу имен метода общих обещаний объектов.

Из jQuery doc вы можете увидеть, как различные методы обещаний относятся к типам обратного вызова:

jqXHR.done(функция (data, textStatus, jqXHR) {}); Альтернатива построить для опции обратного вызова успеха, метод .done() заменяет устаревший метод jqXHR.success(). Обратитесь к разделу deferred.done() для подробности реализации.

jqXHR.fail(функция (jqXHR, textStatus, errorThrown) {});альтернативная конструкция для опции обратного вызова ошибки, метод .fail() заменяет устаревший метод .error(). Обратитесь к разделу deferred.fail() для подробности реализации.

jqXHR.always(функция (данные | jqXHR, textStatus, jqXHR | errorThrown) { }); Альтернативная конструкция для полной опции обратного вызова,.always() заменяет метод устаревших .complete().

В ответ на успешный запрос аргументы функции такие же как .done(): data, textStatus и объект jqXHR. Для неудачные запросы, аргументы те же, что и аргументы .fail(): объект jqXHR, textStatus и errorThrown. Обратитесь к отложенному.()() для деталей реализации.

jqXHR.then(функция (data, textStatus, jqXHR) {}, функция (jqXHR, textStatus, errorThrown) {}); Включает функции .done() и .fail(), позволяя (по jQuery 1.8) основополагающее обещание манипулировать. Обратитесь к отложенному .then() для подробности реализации.

Если вы хотите закодировать таким образом, который более соответствует стандарту ES6 promises, то из этих четырех параметров вы бы использовали только .then().

Ответ 2

Причиной предпочтения Promises над функциями обратного вызова является наличие нескольких обратных вызовов и устранение таких проблем, как Callback Hell.

Обратный звонок (для получения дополнительной информации см. http://callbackhell.com/): Асинхронный javascript или javascript, который использует обратные вызовы, трудно получить правильно интуитивно. Много кода заканчивается следующим образом:

asyncCall(function(err, data1){
    if(err) return callback(err);       
    anotherAsyncCall(function(err2, data2){
        if(err2) return calllback(err2);
        oneMoreAsyncCall(function(err3, data3){
            if(err3) return callback(err3);
            // are we done yet?
        });
    });
});

С Promises выше код можно переписать следующим образом:

asyncCall()
.then(function(data1){
    // do something...
    return anotherAsyncCall();
})
.then(function(data2){
    // do something...  
    return oneMoreAsyncCall();    
})
.then(function(data3){
    // the third and final async response
})
.fail(function(err) {
    // handle any error resulting from any of the above calls    
})
.done();

Ответ 3

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

Здесь документация. Разница в том, что .success() устарел от jQuery 1.8. Вместо этого вы должны использовать .done().

Если вы не хотите нажимать на ссылку:

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

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

Ответ 4

Из документа:

jqXHR.done(функция (data, textStatus, jqXHR) {});

Конструкция альтернатива для опции обратного вызова успеха,.done() метод заменяет метод устаревший jqXHR.success(). Ссылаться на deferred.done() для деталей реализации.

Точка - это просто альтернатива для опции обратного вызова успеха, а jqXHR.success() устарела.