0

この質問は私の前の質問に関連しています: ブラウザ間でREADYSTATE_LOADEDですか?

だから私はreadyStateがブラウザ間で信頼できないことを知っています。私は現在、この時点で任意のブラウザで概念実証を実行しようとしています。

私はプラグインを使用していて、次のようなコードがあります。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){            

  if (xhr.readyState == 4){
      self._onComplete(id, xhr);                    
  }
  else if (xhr.readyState == 2 ){
    self._onSent( id, xhr );
  }

};

コールバックをログに記録すると、サーバー側スクリプトが応答した後、「complete」の直前に「sent」が発生します。readyState 2とは何か誤解していますか?キックに1を試しましたが、サーバーが応答する前に起動しませんでした。

少なくとも「progress」イベントがあるxhrオブジェクトのuploadオブジェクトを調べましたが、進行状況については何もわかりませんでした。実際、最後の進行状況が97%の場合、ファイルがサーバーへの送信を完了するときに100%で起動することはありません。したがって、サーバーがアップロードを処理している間、readyStateが4になる前に、進行状況は97%でハングします。

これにより、ユーザーは、実際にはアップロードが完全に上がったとしても、アップロードが停止したと考えるようになります。

4

1 に答える 1

3

リクエストがいつ送信されたかを確認するための状態はありません。

readyState2は、サーバーが応答し、すべてのヘッダーが着信したことを意味します。これは、リクエストの本体セクションが着信する直前に発生します。

最善の策は、send()コマンドを発行するときに独自のイベントを発生させることです。

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){            

  if (xhr.readyState == 4){
      self._onComplete(id, xhr);                    
  }
  else if (xhr.readyState == 2 ){
    // Headers received
  }

};

xhr.send(data)
self._onSend( id, xhr );

4.6州

UNSENT(数値0)オブジェクトが作成されました。

OPENED(数値1)open()メソッドが正常に呼び出されました。この状態の間、リクエストヘッダーはsetRequestHeader()を使用して設定でき、リクエストはsend()メソッドを使用して作成できます。

HEADERS_RECEIVED(数値2)すべてのリダイレクト(存在する場合)が実行され、最終応答のすべてのHTTPヘッダーが受信されました。オブジェクトのいくつかの応答メンバーが使用可能になりました。

LOADING(数値3)応答エンティティ本体を受信して​​います。

DONE(数値4)データ転送が完了したか、転送中に問題が発生しました(無限リダイレクトなど)。

http://www.w3.org/TR/XMLHttpRequest/#states

編集

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){            

  if (xhr.readyState == 4){
      self._onComplete(id, xhr);                    
  }
  else if (xhr.readyState == 2 ){
    // Headers received
  }
  else if (xhr.readyState == 1 ){
    // xhr.open() called
    // You can set headers here amoung other things
    xhr.send(data)
    self._onSend( id, xhr );
  }

};

xhr.open(method, url, async, user, password)

http://www.w3.org/TR/XMLHttpRequest/#the-open-method

于 2012-07-26T22:37:01.127 に答える