17

私が使う:

var jqXHR = $.ajax(settings);
jqXHR.success(function(result){});
jqXHR.error(function(result){});
jqXHR.complete(function(result){});

しかし、バージョン 1.5 では deferred オブジェクトが追加されました。

Q: 一般的に、success、error、および complete メソッドと、deferred then、done、fail の新しいホットネスを使用するのはいつですか?

4

2 に答える 2

17

For$.ajax()および family.successは Deferred の の同義語に過ぎず、.done同様.errorに も の同義語です.fail

実際、あなたが示している例はすでに遅延メソッドですが、名前が異なります。

.completeほとんどが新しい jQuery 1.6 の同義語であり、.alwaysを使用して同じ効果を得ることができます$.then(cb, cb)。これによりcb、AJAX 呼び出しが成功するかどうかにかかわらず、 が呼び出されます。とバリアントの間.completeで、「失敗」コールバックに渡されるパラメータに小さな違いがあると思います。.always$.then

個人的には、これらの名前付き関数の Deferred バージョンを使用することを好みます。これは、遅延オブジェクトが jqXHR であるかどうかを気にする必要がないためです。、、およびのみjqXHRsがありますが、すべてのDeferred (jqXHR を含む) には、およびがあります。.success.error.complete.done.fail.always

編集jQuery開発者は私に同意しているようです-彼らはそれを発表.success、jQuery 1.8で廃止される予定.errorです.complete

于 2011-06-08T21:22:09.683 に答える
9

Deferred は jqXHR を置き換えることを意図しており、ajax を超えた成功とエラーの概念を抽象化します。

ソース コードの概要: jQuery 1.6.1

// completeDeferred is resolved in only one place.
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );

deferred.promise( jqXHR ); // this attaches the promise methods to jqXHR
jqXHR.success = jqXHR.done;
jqXHR.error = jqXHR.fail;
jqXHR.complete = completeDeferred.done;

deferred がどのように役立つかについて、仕事用にチーズのスライド ショーを作成しました。

于 2011-06-22T21:13:20.520 に答える