105

誰でも私を助けることができますか?との
の違いがわかりません。success.done()$.ajax

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

4

4 に答える 4

114

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

jQuery 1.8 では、jqXHRオブジェクト ( によって返される$.ajax)は、およびにsuccess置き換えられました。doneerrorfailcompletealways

ただし、古い構文で 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 のdeferred objectとの互換性のためです。Deferred (および現在Promiseは、Chrome と FX で完全にネイティブ ブラウザーをサポートする ) を使用すると、非同期アクションをチェーンできます。

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

この一連の関数は、 で得られる入れ子になったコールバックのピラミッドよりも保守が簡単ですsuccess

ただし、代わりに使用する構文をdone支持して、現在は非推奨になっていることに注意してください。Promisethen

$.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); });

これは、asyncand awaitextends が改善された構文 (およびエラー処理) を約束するため、採用する価値があります。

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); 
}
于 2012-01-13T08:38:43.537 に答える
6

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

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

于 2012-01-13T08:41:32.523 に答える
6

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

done()にアタッチされたコールバックは、遅延が解決されたときに発生します。fail()にアタッチされたコールバックは、遅延が拒否されたときに発生します。

promise.done(doneCallback).fail(failCallback)

.done() has only one callback and it is the success callback
于 2012-01-13T08:45:16.193 に答える
1

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

于 2012-01-13T08:44:00.600 に答える