長時間実行されているXMLHttpRequestが実際にサーバーに接続されたことを検出しようとしています。XMLHttpRequestが接続されたときに検出
readystatechangeイベントをリッスンすると、要求が完了したときにのみ起動されます。私のテストサーバーはヘッダーといくつかのデータを送信し、長いタイムアウト(10秒)後に要求を終了します。 XHRは、最後のイベントのみを起動し、次の各状態をバックツーバックで処理します。HEADERS_RECEIVED、LOADING、DONE。ここで
は私のブラウザのコードです:
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function(evt) {
console.log('Request is now in state ' + xhr.readyState);
if(xhr.readyState === xhr.HEADERS_RECEIVED) {
console.log('Request has started');
}
if(xhr.readyState === xhr.DONE) {
console.log('Request is finished');
}
};
xhr.send(null);
ヘッダが実際に受信されているとき、どのように私は検出することができますか?私は、APIで利用できるものに基づいてリクエストが開始されたときに検出できないと仮定しています。これまでのところ、私は次のように作ってみた
:要求は、例えば開いたとき
- Set要求メソッドは、いくつかのデータを送信します
xhr.send('something')
- このよう
xhr.upload.onload
コールバック
のために聞く:
xhr.upload.onload = function(evt) {
console.warn('Request has started');
};
しかし、FirefoxとSafariでのみ有効です。 ChromeやIEではありません。
なぜそれが長くかかるのか分かりませんか?あなたが待っているデータがもうない場合は、〜10秒の操作を別のページに移動することができますので、できるだけ早くXHRを終了してください。 – sdleihssirhc
私は意図的にそれを延期しています。これは、多くのXHRを使用するアプリケーションのテストで、起動または完了したタイミングを検出する必要があります。 – robbles