[解決済み】jQuery.ajaxのcontinueレスポンスの処理。"success:" vs ".done"?
質問
私は数週間前からjQueryとAJAXを使用していますが、一度呼び出したスクリプトを「継続」する2つの異なる方法を目にしました。
success:
と
.done
.
のあらすじから。 jQueryのドキュメント を得ることができます。
.done(): 説明 Deferredオブジェクトが解決された時に呼ばれるハンドラを追加します。
success: (.ajax() オプション)。リクエストが成功した場合に呼び出される関数。
つまり、どちらもAJAX呼び出しが完了/解決した後に何かを行うのです。どちらか一方をランダムに使ってもいいのでしょうか?また、どのような場合にどちらかの代わりに使用するのでしょうか?
どのように解決するのですか?
success
は、jQueryにおける成功コールバックの伝統的な名前で、ajax呼び出しのオプションとして定義されています。しかし
$.Deferreds
と、より洗練されたコールバックがあります。
done
は、サクセスコールバックを実装するのに適した方法で、任意の
deferred
.
例えば、success。
$.ajax({
url: '/',
success: function(data) {}
});
例えば、完了。
$.ajax({url: '/'}).done(function(data) {});
のいいところは
done
の返り値は
$.ajax
は遅延プロミスとなり、アプリケーション内の任意の場所にバインドすることができます。そこで、このajaxコールをいくつかの異なる場所から行いたいとします。このajax呼び出しを行う関数にオプションとして成功関数を渡すのではなく、関数が単に
$.ajax
を作成し、コールバックを
done
,
fail
,
then
といった具合です。ただし
always
は、リクエストが成功したか失敗したかに関わらず実行されるコールバックです。
done
は成功したときのみ起動します。
例えば
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json',
beforeSend: showLoadingImgFn
})
.always(function() {
// remove loading image maybe
})
.fail(function() {
// handle request failures
});
}
xhr_get('/index').done(function(data) {
// do stuff with index data
});
xhr_get('/id').done(function(data) {
// do stuff with id data
});
保守性の面でこの方法の重要な利点は、アプリケーション固有の関数でajaxメカニズムを包んだことです。もし、あなたが
$.ajax
の呼び出しが将来的に異なる動作をするようになったり、別の ajax メソッドを使ったり、jQuery から離れたりした場合でも、単に
xhr_get
の定義(必ずプロミスを返すか、少なくとも
done
メソッドを使用します)。アプリ内の他の参照はすべて同じでよい。
を使うと、もっとたくさんの(もっとクールな)ことができるんだ。
$.Deferred
そのうちの1つは
pipe
を使用している場合でも、サーバーから報告されたエラーで失敗をトリガーすることができます。
$.ajax
リクエスト自体は成功します。例えば
function xhr_get(url) {
return $.ajax({
url: url,
type: 'get',
dataType: 'json'
})
.pipe(function(data) {
return data.responseCode != 200 ?
$.Deferred().reject( data ) :
data;
})
.fail(function(data) {
if ( data.responseCode )
console.log( data.responseCode );
});
}
xhr_get('/index').done(function(data) {
// will not run if json returned from ajax has responseCode other than 200
});
について詳しく読む
$.Deferred
をご覧ください。
http://api.jquery.com/category/deferred-object/
ノート
: jQuery 1.8 時点で。
pipe
は非推奨となり、代わりに
then
を全く同じように使用することができます。
関連
-
[解決済み] jQuery が Ajax 呼び出しの終了を待って戻るようにするにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] event.preventDefault() vs. return false
-
[解決済み] GoogleのホストされたjQueryを使用する最良の方法、しかしGoogleの私のホストされたライブラリにフォールバックすることは失敗します。
-
[解決済み] Ajaxリクエストが200 OKを返すが、successではなくerrorイベントが発生する
-
[解決済み] jQuery の Ajax リクエストがすべて終了するまで待ちますか?
-
[解決済み] jQuery.ajaxでmultipart/formdataを送信する。
-
[解決済み] Deferredsの配列を$.when()に渡す
-
[解決済み] FirefoxでjQuery $.ajax(), $.post がREQUEST_METHODとして "OPTIONS "を送信する問題
-
[解決済み] Access-Control-Allow-Originですべてのドメインを許可する設定にした場合、どのようなセキュリティリスクがありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Google Maps APIがAJAX使用時のみ「Uncaught ReferenceError: google is not defined」を投げる。
-
[解決済み] AJAX使用時にGoogle Maps APIが "Uncaught ReferenceError: google is not defined "を投げる。
-
PDOException "could not find driver" (ドライバが見つかりません)
-
[解決済み] 一般的なブラウザでは、AJAX(XmlHttpRequest)の同時リクエストはいくつまで可能ですか?
-
[解決済み】AJAXレスポンスはクッキーを設定することができますか?
-
[解決済み】Chromeでのリクエストモニタリング
-
[解決済み】「for (;;); { json data }」のようなAjax呼び出し応答は何を意味するのでしょうか?[重複している]。
-
[解決済み] AJAXアプリのアドレスバーのURLを現状に合わせて変更する
-
[解決済み] Access-Control-Allow-Originですべてのドメインを許可する設定にした場合、どのようなセキュリティリスクがありますか?
-
[解決済み] ブラウザでパスワードの保存を促すにはどうしたらいいですか?