XMLHttpRequestを完了する前に途中で中断させるには abort()
を実行します。
var xhr = new XMLHttpRequest();
xhr.open('GET', '…');
xhr.send();
xhr.abort();
jQueryの場合も同様に abort()
を使います。
var jqXHR = $.ajax({ url: '…' });
jqXHR.abort();
タイムアウトを実装する
具体的な利用場面としては、XHRにタイムアウトを設定したい場合。普通にしているとタイムアウトするまでに60秒待たされたりするので、それを例えば10秒でタイムアウトさせたい場合はこんな感じで書けます。
// XMLHttpRequestを発行する
var jqXHR = $.ajax({ url: '…' });
jqXHR.fail(function () {
console.log('Fail');
});
setTimeout(function () {
// 10秒後まだpendingだったらabortする。
if (jqXHR.state() === 'pending') jqXHR.abort();
}, 1000 * 10);
fail()
はXHR通信に失敗したときに実行される関数を登録するものですが、 abort()
時も実行されます。