web-dev-qa-db-ja.com

JQuery.getJSON()が成功し、関数を実行するのはなぜですか?

getJSONのJQueryドキュメント は次の例を示しています。

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()関数の違いは何ですか?それらは同じもののようです。

14
David Thielen

最初は、jQuery非同期関数はpromiseを返さなかったため、コールバックを使用する必要がありました。

その後、据え置き(約束)システムを追加しましたが、互換性のためにコールバックを保持しました(延期が好きなわけではないため)。

遅延オブジェクトのドキュメント から:

JavaScriptでは、その関数内で呼び出されるコールバックをオプションで受け入れる関数を呼び出すのが一般的です。たとえば、injQuery 1.5より前のバージョンでは、jQuery.ajax()などの非同期プロセスがコールバックを受け入れて、いつか呼び出されます。 ajaxリクエストの成功、エラー、完了時に近い将来に。

jQuery.Deferred()は、コールバックが管理および呼び出される方法にいくつかの拡張機能を導入します。特に、jQuery.Deferred()は複数のコールバックを提供する柔軟な方法を提供し、元のコールバックディスパッチがすでに発生しているかどうかに関係なく、これらのコールバックを呼び出すことができます。 jQuery DeferredはCommonJS Promises/A設計に基づいています。

13
Denys Séguret

彼らは同じものです。 done関数は Promise のように機能することを意図しています。これにより、ajax呼び出しの結果からハンドラーをインストールできます。非同期呼び出しが終了した後にdoneを呼び出した場合でも機能します(戻り値を格納することにより)

4
Juan Mendes