jQuery の $.ajax を用いた Ajax 通信処理を実装していると、「リクエストした Ajax 通信を中断したい」というストーリーに遭遇することがある。
こういうときは $.ajax が返却する jqXHR オブジェクト を変数に取得しておき、その中にある abort メソッドを叩いてあげることで Ajax 通信の中断を実現することができる。
jqXHR.readyState の値を見て abort するべきか否かを判定するとよりベターだろう。
readyState は 0~4 の値を取る。
| 値 | 説明 |
|---|---|
| 0 | オブジェクトが生成された |
| 1 | サーバとの接続を確立 |
| 2 | リクエストを送信している |
| 3 | レスポンスを取得中 |
| 4 | レスポンスの取得完了(処理可能) |
なので、「0より大きく4より小さいならば」というときに abort を叩いてあげるといい。
中断時に注意すること
ところで $.ajax のコードにはレスポンスがエラーだった場合のコールバック関数 fail をメソッドチェーンにして宣言することができる。
fail はレスポンスのエラー発生時だけでなく、abort を叩くことによる中断時にも呼ばれることになる。
ただし、このとき引数で取得できる jqXHR オブジェクト の statusText と textStatus には abort という文字列が格納される。
このことから、中断時は fail の中で何もしたくないなら以下のように定義するといいだろう。
$.ajax({
// something
}).fail(function(jqXHR, textStatus) {
if (textStatus === 'abort') { return; }
// for error code
});