XMLHttpRequest读取渐进式数据不起作用?

时间:2010-09-29 02:12:46

标签: javascript xmlhttprequest

我遇到XMLHttpRequest下载渐进式数据的问题。我获得状态2而不是状态3.状态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?

2 个答案:

答案 0 :(得分:0)

这个问题最有可能发生在这个问题上:

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

原因是xmlRequest尚未完成(readyState = 4完成时)。当您过早地请求responseText时,它会触发错误并停止代码完成。

所以你要把它改成:

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

答案 1 :(得分:-4)

Kranu是正确的,当readyState为3时,不允许您阅读responseText。请参阅http://www.davidflanagan.com/2005/08/xmlhttprequestreadystate-3.html

解决方案是一次发送一条消息。当您收到一条消息时,只需再制作一个XHR。这就是谷歌(服务器)推送的方式。