web-dev-qa-db-ja.com

成功と$ .ajaxの.done()メソッドの違いは何ですか

誰も私を助けることができますか?
$.ajaxsuccess.done()の違いを理解できません。

可能であれば、例を挙げてください。

97
Poonam Bhatt

つまり、成功コールバック関数をajax関数から切り離すことで、後で元のコード(オブザーバーパターン)を変更せずに独自のハンドラーを追加できます。

ここからより詳細な情報を見つけてください: https://stackoverflow.com/a/14754681/1049184

10
batbaatar

successは、AJAX呼び出しが成功した場合にのみ発生します。つまり、最終的にHTTP 200ステータスを返します。 errorは、失敗した場合に起動し、成功に関係なく、要求が終了したときにcompleteを起動します。

JQuery 1.8では、jqXHRオブジェクト($.ajaxで返されます)successdoneに、errorfailに、completealwaysに置き換えられました。

ただし、AJAXリクエストを古い構文で初期化することはできます。したがって、これらは同様のことを行います。

// set success action before making the request
$.ajax({
  url: '...',
  success: function(){
    alert('AJAX successful');
  }
});

// set success action just after starting the request
var jqxhr = $.ajax( "..." )
  .done(function() { alert("success"); });

この変更は、jQuery 1.5の 遅延オブジェクト との互換性のためです。延期(およびChromeおよびFXでネイティブブラウザーを完全にサポートするPromise)を使用すると、非同期アクションをチェーンできます。

$.ajax("parent").
    done(function(p) { return $.ajax("child/" + p.id); }).
    done(someOtherDeferredFunction).
    done(function(c) { alert("success: " + c.name); });

この一連の関数は、successで取得するコールバックのネストされたピラミッドよりも保守が簡単です。

ただし、代わりにdoneを使用するPromise構文を優先して、thenが非推奨になっていることに注意してください。

$.ajax("parent").
    then(function(p) { return $.ajax("child/" + p.id); }).
    then(someOtherDeferredFunction).
    then(function(c) { alert("success: " + c.name); }).
    catch(function(err) { alert("error: " + err.message); });

asyncおよびawaitの拡張により、構文(およびエラー処理)の改善が約束されるため、これを採用する価値があります。

try {
    var p = await $.ajax("parent");
    var x = await $.ajax("child/" + p.id);
    var c = await someOtherDeferredFunction(x);
    alert("success: " + c.name);
}
catch(err) { 
    alert("error: " + err.message); 
}
102
Keith

.success()は、Webサーバーが200 OK HTTPヘッダーで応答する場合にのみ呼び出されます-基本的にはすべてが正常な場合。

Done()にアタッチされたコールバックは、遅延オブジェクトが解決されると起動されます。 fail()にアタッチされたコールバックは、遅延オブジェクトが拒否されたときに起動されます。

promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback
6

successは、リクエストが成功したときに呼び出されるコールバックで、$.ajax呼び出しの一部です。 doneは、実際には$.ajax()によって返されるjqXHRオブジェクトの一部であり、jQuery 1.8のsuccessを置き換えます。

0
devdigital