実行時間の長い XMLHttpRequest が実際にサーバーに接続された時期を検出しようとしています。
現在、readystatechange イベントをリッスンすると、リクエストが終了したときにのみ発生します。私のテストサーバーはヘッダーといくつかのデータを送信し、長いタイムアウト (10 秒) の後、要求を終了します。XHR は最後にのみイベントを発生させ、その後、次の状態のそれぞれに対して 1 つを連続して実行します: 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 で利用可能なものに基づいて、リクエストがいつ開始されるかを検出できないと想定しています。
これまでのところ、次のことを思いつきました。
- リクエストメソッドを POST に設定
- リクエストが開かれたときにいくつかのデータを送信します。
xhr.send('something')
xhr.upload.onload
コールバックを聞く
このような:
xhr.upload.onload = function(evt) {
console.warn('Request has started');
};
ただし、これは Firefox と Safari でのみ機能します。Chrome や IE ではありません。