おやまのエンジニアリングブログ

某ゲーム開発会社のフルスタックエンジニアしてます

HTTPステータスコードを使ってAJAX通信を整理する

クライアントサイドでAJAX通信をハンドリングするときに
HTTPのステータスコードを使うと可読性がアップする上にサーバーもクライアントも
整理できるので非常に便利であることが最近わかったので
ここに使い方をここにまとめておきます。

実装例は以下のとおり。

var $myAjax = function(settings) {
  // ユーザーの定義したエラーハンドラーをキャッシュする。
  var customErrorHandler = settings.error || function() {};

  settings.error = function(xhr, text, error) {
    // ユーザー定義のハンドラーを実行してfalseが帰ってきたら終了する。
    if(customErrorHandler(xhr, text, error) === false) {
      return;
    }

    if(xhr.status >= 500) {
      // ...
    }
  };
  $.ajax(settings);
};


私は以下のエラーに対してハンドリングを入れています。

401: Unauthroized (許可されていない)
セッションが無かった場合に使う。セッションが切れていた場合は、440を使う。

403: Forbidden (禁断)
ユーザーの権限ではアクセス出来ない場所にアクセスしようとした場合に返す。

404: Not Found (見つからない)
ページが見つからなかった時にサーバーが勝手に返す。

409: Conflict (衝突)
サーバー皮の状態とリクエストの状態が一致しない時に返す。

410: Gone (無い)
リソースは無くなっていて、クライアント側でもリソースを破棄すべき時に返す。

440: Login Expired (ログイン期限切れ)
セッションの有効期限が切れた時に使う。

0: Timeout (通信タイムアウト)
これだけは特殊で、サーバーからではなく、ブラウザが返すエラー。
通信が切断されていたり、時間以内に通信が帰ってこなかった場合に発生する。

>=500: サーバーエラー系
いわゆるサーバーエラー系全て。

例外

205: Reset Content (コンテンツをリセット)
ページのリソースが古い場合にリセットするように支持する時に返す。
ただし、ステータスコードが200系なので、successの方に仕込む必要がある。