2013-02-18 10 views
5

私がthe documentationと言うことができる限り、$.ajax()コールから応答を処理する2つの異なる方法があります。 $.ajax()の設定に渡す機能を持つjquery ajax:コールバックフックと設定関数を使用するタイミング

1)オブジェクト:チェーン可能"コールバックフック"

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

として

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

2)との間に重要な違いは何ですかこれらの2つのアプローチは、いつ別のものを選択する必要がありますか?

答えて

1

コールに直接機能を追加する場合は、使用方法に大きな違いはありません。違いは、コールバック関数を別の場所に配置したい場合です。

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

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

復帰後の応答を待っている方法からの約束、::

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

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

var promise = callForMe(); 
// later on: 
promise.done(function(data){ 
    // handle the response 
}); 
+0

振り返ってみると、これは私には明らかだったはずです...しかし、明確な説明と例がありがとうございます。 –

1

は、私はいつもが新しい繰延オブジェクトを使用し(すなわち多くの場合、コード長の節約はありませんが、連鎖可能な.done,.failなど)バージョンです。

これは、私がデカップルのAJAXコールを後続の応答処理から除外できるようにするためです。

  • は、AJAX呼び出しがありませんAJAXヘルパーの
  • 使用.failハンドラを完了した後でも、複数のハンドラを追加し、データ処理からのフェッチ

    1. 離れて抽象データ:

      デカップリングに私を可能にerror:パラメータ

    2. .pipeを使用してデータを後処理して、他のハンドラに渡す前に
    3. シンク

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

    this answerを参照してください。ここでは、より具体的な利点の例を挙げました。

  • +0

    は、彼がこの条約に同意すれば、@ Guffaにコメントして尋ねるつもりだった。私は、両方よりも1つの使用法を覚えるのがはるかに簡単です。 他のアプローチに大きな利点があると思われる状況はありますか?そうでなければ、私はあなたと一緒にボートに入っています。 –

    +0

    古いスタイルよりも遅延アプローチのメリットが多くあり、古い 'success 'スタイルハンドラでは簡単にはできないことができます。 – Alnitak

    +0

    偉大な、ちょうど(あなたの他の答え)(http://stackoverflow.com/a/14754681/6782)​​も、素晴らしいものを読む(+1)。 TIL –

    関連する問題