0

実行時間の長い 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 ではありません。

4

1 に答える 1

2

XMLHttpRequest オブジェクトには 5 つの準備状態があります

  • 0 = 初期化されていない
  • 1 = 読み込み中
  • 2 = ロード済み
  • 3 = インタラクティブ
  • 4 = 完了

コードでそれらのうちの 2 つをチェックしているだけです。またelse if、効率のために を使用する必要があります。

于 2011-08-16T20:57:58.877 に答える