5

ドキュメントからわかる限り、呼び出しからの応答を処理する方法は 2 つあり$.ajax()ます。

$.ajax()1)の設定オブジェクトに関数を渡す:

$.ajax({
    success: function(){ ... },
    error: function(){ ... }
});

2) 連鎖可能な「コールバックフック」として

$.ajax({...})
    .done(function(){ ... })
    .fail(function(){ ... })

これら 2 つのアプローチの重要な違いは何ですか? また、いつどちらを選択する必要がありますか?

4

2 に答える 2

1

多くの場合、コードの長さを節約することはできませんが、私は常に新しい遅延オブジェクト (つまり chainable など) バージョンを使用します.done.fail

その理由は、AJAX 呼び出しの詳細をその後の応答処理から切り離すことができるからです。

デカップリングにより、次のことが可能になります。

  1. データ処理からデータ取得を抽象化する
  2. AJAX 呼び出しが完了した後でも、複数のハンドラーを追加する
  3. パラメーター.failを持たない AJAX ヘルパーでハンドラーを使用するerror:
  4. .pipe他のハンドラに渡す前にデータを後処理するために使用します
  5. 他の非同期イベントと同期する

コールバックを直接 AJAX 呼び出しに渡す必要はありません。

利点のより具体的な例を示したこの回答を参照してください。

于 2013-02-18T22:49:39.360 に答える
1

呼び出しで関数を直接アタッチしている場合、使用方法に大きな違いはありません。違いは、コールバック関数を別の場所に置きたい場合です。

コールバック関数をメソッドに送信:

function callForMe(callback) {
  $.ajax({
    url: '...',
    success: callback
  });
}

callForMe(function(data){
  // handle the response
});

メソッドから promise を返し、後で応答を待ちます。

function callFormMe() {
  return $.ajax({
    url: '...'
  });
}

var promise = callForMe();
// later on:
promise.done(function(data){
  // handle the response
});
于 2013-02-18T22:43:30.363 に答える