$.post()のコールバックが動くのはHTTPステータスコードが2xxのとき(jQuery)

前回の続き、というか補足メモ。

jQueryで作るAjaxな検索フォーム(テスト) | mutter

JavaScript: 検索部分

function sampleSearchFilckr () {
var word = $('#sampleSearchWord').val();
if(!word) {
alert('検索語を入力してください');
return false;
}
//検索
$.post(
'/sample/flickr',
{"q": word},
function(data, status) {
//searchに成功したら結果を表示する
$('#sampleSearchResult').html(data);
},
"html"
);
}



この部分がコールバックになるわけですが、

function(data, status) {
//searchに成功したら結果を表示する
$('#sampleSearchResult').html(data);
}

ここが評価されるのはレスポンスのHTTPステータスコードが正常のときだけなので、こうなると。

  • HTTPステータスコードでエラーを返されるとハンドリングできない
  • HTTPステータスコードを200のままでエラーメッセージ出力とかしちゃうと実行されちゃう

エラーをハンドリングするには、.error()とか.complete()とかを上手く使えば良いとの話。

jQuery.post() – jQuery API
jQuery 1.5でのAJAXの書き方: 細切れに書くことや、遅延処理が可能 – memo.yomukaku.net

なるほど。


つまり?

HTTPステータスコードはちゃんと使いましょうねという話でございました。

先のエントリで使ったFlickrのやつ(エントリの為にでっち上げたサンプル)は、エラーがあったら400とか500とか返すようにしています。まぁ、別にJavaScript側ではエラー処理はしてませんけども(沈黙するだけ)。