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

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

jQueryで通信が失敗した時にリトライする方法

$.ajaxを使う際に、通信が切断された時のハンドリングによく困ります。
なので切断された場合、私はユーザーにダイアログを出して再送信を行ってもらうようにしています。

あまり知られていませんが、失敗した時のリクエストと全く同じ内容で再送信することが可能なのです。実は、success/error/complete等のコールバック関数のコンテキストは全て、jQueryの設定パラメータになっているのです。なので、$.ajax(this);とするだけで、再送が可能になるのです。

実際のコードは以下のとおり。

$.ajax({
  url: "/test",
  error: function(xhr) {
    // 通信がタイムアウト
    if(xhr.status === 0) {
      $.ajax(this); // ← これ
    }
  }
});

ちな、githubにこれできるプラグインあったので、リンク貼っておきます。
alexmackey/retryajax · GitHub