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

Почему JQuery.getJSON() имеет успех и выполненную функцию?

Документация JQuery для getJSON показывает пример:

var jqxhr = $.getJSON( "example.json", function() {
  console.log( "success" );
})
  .done(function() {
    console.log( "second success" );
  })
  .fail(function() {
    console.log( "error" );
  })
  .always(function() {
    console.log( "complete" );
  });

Какая разница между функцией успеха (переданной как 2-й параметр) функцией done()? Кажется, это одно и то же.

4b9b3361

Ответ 1

Изначально асинхронные функции jQuery не возвращали promises, вам приходилось использовать обратный вызов.

Затем они добавили отложенную (обещающую) систему, но сохранили обратные вызовы для совместимости (и потому, что не всем нравится отсрочка).

От документация по отложенному объекту:

В JavaScript обычно вызывается функция, которая при необходимости принимает обратные вызовы, вызываемые внутри этой функции. Например, в до jQuery 1.5, асинхронные процессы, такие как jQuery.ajax() принимает обратные вызовы, которые будут вызываться некоторое время в рядом с будущим после успеха, ошибки и завершения запроса ajax.

jQuery.Deferred() вводит несколько улучшений способа обратного вызова управляются и вызывают. В частности, jQuery.Deferred() предоставляет гибкие способы предоставления множественных обратных вызовов, и эти обратные вызовы могут вызывается независимо от того, была ли исходная отправка обратного вызова уже произошло. jQuery Отложенная основана на CommonJS Promises/A дизайн.

Ответ 2

Это одно и то же. Проделанная функция предназначена для работы как Promise Таким образом вы можете установить обработчики из результата вызова ajax. Он работает даже после завершения асинхронного вызова (путем сохранения возвращаемого значения)