2013-08-16 11 views
65

質問jQueryのAJAX()は常に成功、エラーと完全の.done対()、.fail()を使用して()

  1. は、我々は、以下の提案のように、私たちのコードを変更する必要がありますか?
  2. .done() & success:.fail() & error:.always() & complete:の間に違いはありますか?

プリアンブル

私も過去に成功してきたjQuery.ajaxコールを、一緒に入れていました。このような何か:

$.ajax(
    { 
     url: someUrl, 
     type: 'POST', 
     data: someData, 
     datatype: 'json', 
     success: function (data) { someSuccessFunction(data); }, 
     error: function (jqXHR, textStatus, errorThrown) { someErrorFunction(); } 
    }); 

いくつかのドキュメントをざっと見て取っている間、私は、成功、エラー、完全なコールバックがjQueryの1.8で廃止されていることを示す参照に出くわしました。最終的な削除のためにコードを準備するには、代わりにjqXHR.done()、jqXHR.fail()およびjqXHR.always()を使用してください。

したがって、我々は、この代わりのようなものをコーディングを開始する必要があります

$.ajax("example.php") 
    .done(function (data) { someSuccessFunction(data); }) 
    .fail(function (jqXHR, textStatus, errorThrown) { someErrorFunction(); }) 
    .always(function() { alert("complete"); }); 
+1

私はAJAXによって返された約束がコールバックは廃止されていない –

+6

使用されている第二の方法を...好みます。 jqxhrオブジェクトの関連するメソッドは次のとおりです。 –

+0

私はArunに同意します、私はそれを個人的に読みやすいと考えています – Rooster

答えて

34

は、まあ、その特定の状況でそれを行うのも利点はありません。

.done().fail().always()方法のポイントは、あなたが

  1. はどこにもないあなたが$.ajax呼び出しである場合$.ajax

を呼び出したちょうどその時、そう複数のハンドラをアタッチすることができますということですサイトには単一のハンドラしか付いていないので、これらの利点は実際には作用しません。

あなたは約束を返すことができ、他の人は自分のハンドラを添付することができます。

例は、Ajaxリクエストの後にプラグインをリフレッシュされます。

$.ajaxPrefilter(function(opt, origOpt, jqxhr) { 
    jqxhr.always(function() { 
     $("[data-plugin]").plugin(); 
    }); 
}); 
+3

FYI - jQuery 1.5以降の[docs](http://api.jquery.com/jQuery.ajax/)によると、 'complete'、' error'と 'success'の設定はコールバック関数の配列を受け取り、複数のハンドラをアタッチすることができます。#2のための – user9645

+0

: '$ .ajax()'を呼び出す以外に、これらのメソッドはどこで使われるのでしょうか?これらのメソッドはjqxhrレシーバでのみ機能しますか? – ahnbizcad

関連する問題