1. ホーム
  2. jquery

[解決済み] ディファード・オブジェクトとは何ですか?

2022-08-31 05:42:46

質問

jQuery 1.5では、"Deferred Objects"が追加されました。 これは何でしょうか、また、具体的に何をするのでしょうか?

どのように解決するのですか?

遅延オブジェクト

jQuery 1.5では、Deferredオブジェクトは複数のコールバックを自己管理されたコールバックキューに登録し、コールバックキューを適切に起動し、同期または非同期の関数の成功または失敗状態を中継する方法を提供します。

遅延メソッド。

  • 遅延.完了()
    • Deferredオブジェクトが解決された時に呼び出されるハンドラを追加します。
  • 遅延.失敗()
    • Deferredオブジェクトが拒否された時に呼び出されるハンドラを追加します。
  • deferred.isRejected()
    • Deferredオブジェクトが拒否されたかどうかを判定します。
  • 遅延.isResolved()
    • Deferredオブジェクトが解決されたかどうかを判定します。
  • 遅延.拒否()
    • Deferredオブジェクトを拒否し、与えられた引数で任意のfailCallbacksを呼び出します。
  • deferred.rejectWith()
    • Deferredオブジェクトを拒否し、与えられたコンテキストとアーギュメントで任意のfailCallbacksを呼び出します。
  • 遅延.解決()
    • Deferredオブジェクトを解決し、与えられた引数で任意のdoneCallbacksを呼び出します。
  • deferred.resolveWith()
    • Deferredオブジェクトを解決し、与えられたコンテキストとアーギュメントを用いて、任意のdoneCallbacksを呼び出します。
  • 遅延.then()
    • Deferredオブジェクトが解決された時や拒否された時に呼び出されるハンドラを追加します。

Deferred In Actionです。

$.get("test.php").done(
    function(){ alert("$.get succeeded"); }
);

$.get("test.php")
    .done(function(){ alert("$.get succeeded"); })
    .fail(function(){ alert("$.get failed!"); });

また、既存のajax()メソッドのコールバックは、設定で宣言するのではなく、連鎖させることができるようです。

var jqxhr = $.ajax({ url: "example.php" })
    .success(function() { alert("success"); })
    .error(function() { alert("error"); })
    .complete(function() { alert("complete"); });


動作例 Eric Hynds氏のブログ記事より : http://jsfiddle.net/ehynds/Mrqf8/


jqXHR

jQuery 1.5以降、$.ajax()メソッドは、XMLHTTPRequestオブジェクトのスーパーセットであるjXHRオブジェクトを返します。詳細については、$.ajaxのエントリのjXHRセクションを参照してください。


から jquery 1.5リリース :

遅延オブジェクト

Ajax の書き換えとともに モジュールの書き換えとともに、新しい機能が導入されました。 これも一般に公開されました。 公開されました。 遅延オブジェクト . これは この API を使用すると、返り値を扱うことができます。 を扱うことができます。 非同期Ajaxリクエストの戻り値など のような)すぐに存在しない戻り値を扱うことができます。 さらに、このAPIでは 複数のイベントハンドラをアタッチできる をアタッチできるようになります (以前は Ajax API では不可能でした)。 Ajax APIでは不可能でした)。

さらに、公開されている を使って、独自のディファードオブジェクトを作ることができます。 jQuery.Deferredを使って、独自の遅延オブジェクトを作ることができます。より詳細な情報は で見ることができます。 遅延オブジェクト のドキュメントを参照してください。

Eric Hyndsは良い チュートリアルを書いています。 jQueryでDeferredsを使う 1.5 .