XMLHttpRequestがプログレッシブデータを読み取らない

javascript xmlhttprequest
XMLHttpRequestがプログレッシブデータを読み取らない

プログレッシブデータのダウンロードでXMLHttpRequestに問題があります。 状態3よりも状態2を取得します。 状態3の後、再び呼び出されることはありません。 何がおかしいのですか? データをフラッシュする必要がある場所を読みましたが、どうすればよいですか?

これが私のコードです:

var xmlHttp = new XMLHttpRequest();
// try to connect to the server
try
{
  // initiate server request
  xmlHttp.open("GET", "http://208.43.121.133:8164/;", true);
  xmlHttp.setRequestHeader("Icy-Metadata", "1");
  xmlHttp.onreadystatechange = function()
  {
    alert("status: "+xmlHttp.status);
    alert("State: "+xmlHttp.readyState);

    if (xmlHttp.readyState == 3)
    {
      alert(xmlHttp.responseText);
    }
  };
  xmlHttp.send(null);
}
// display an error in case of failure
catch (e)
{
  alert("Can't connect to server:\n" + e.toString());
}

readyStateが3のときにxmlHttp.responseTextを読み取ることができますか?

  5  0


ベストアンサー

問題はこのセグメントにある可能性が最も高いです。

    if(xmlHttp.readyState == 3) {
        alert(xmlHttp.responseText);
    }

その理由は、xmlRequestがまだ完了していない(完了時にreadyState = 4)ためです。 responseTextを時期尚早に要求すると、エラーが発生し、コードの終了が停止しました。

したがって、次のように変更します。

if(xmlHttp.readyState == 4) {
    alert(xmlHttp.responseText);
}

0


Kranuは正しいです。readyStateが3の場合、responseTextを読み取ることはできません。 http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.htmlを参照してください

解決策は、一度にメッセージを送信することです。 1つのメッセージを受信したら、別のXHRを作成します。 これが、Googleがサーバープッシュを行う(行う?)方法です。

-4


タイトルとURLをコピーしました