誰も私を助けることができますか?$.ajax
のsuccess
と.done()
の違いを理解できません。
可能であれば、例を挙げてください。
つまり、成功コールバック関数をajax関数から切り離すことで、後で元のコード(オブザーバーパターン)を変更せずに独自のハンドラーを追加できます。
ここからより詳細な情報を見つけてください: https://stackoverflow.com/a/14754681/1049184
success
は、AJAX呼び出しが成功した場合にのみ発生します。つまり、最終的にHTTP 200ステータスを返します。 error
は、失敗した場合に起動し、成功に関係なく、要求が終了したときにcomplete
を起動します。
JQuery 1.8では、jqXHR
オブジェクト($.ajax
で返されます)success
はdone
に、error
はfail
に、complete
はalways
に置き換えられました。
ただし、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);
}
.success()
は、Webサーバーが200 OK HTTPヘッダーで応答する場合にのみ呼び出されます-基本的にはすべてが正常な場合。
Done()にアタッチされたコールバックは、遅延オブジェクトが解決されると起動されます。 fail()にアタッチされたコールバックは、遅延オブジェクトが拒否されたときに起動されます。
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
success
は、リクエストが成功したときに呼び出されるコールバックで、$.ajax
呼び出しの一部です。 done
は、実際には$.ajax()
によって返されるjqXHR
オブジェクトの一部であり、jQuery 1.8のsuccess
を置き換えます。