【问题标题】:XMLHttpRequest read progressive data not working?XMLHttpRequest 读取渐进式数据不起作用?
【发布时间】:2010-09-29 02:12:46
【问题描述】:

我在使用 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?

【问题讨论】:

    标签: javascript xmlhttprequest


    【解决方案1】:

    问题很可能出在这个片段上:

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

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

    所以你可以把它改成:

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

    【讨论】:

    • 好吧,我需要数据,因为它进来了。我不能等到它完成,因为它永远不会完成,它是一个连续的数据流。
    • 这不是您实现连续数据流的方式。您要做的是加载一部分,完成后,请求流的下一部分。 xmlHttp 不适用于连续数据流。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的链接!更精确的信息......所以我被卡住了:(上面示例代码中给定的url链接来自广播电台,并且有连续的数据包和元数据......这就是我所追求的,元数据......我想解析这些数据...所以 Javascript 不提供渐进式下载。:(
    • 电台是否在同一主机内?我猜是因为你正在为它制作 XHR。另一种方法是将 url 加载到 iframe 中,并每隔一段时间检查 iframe 的内容。最后,您可以在服务器上编写一个脚本,使用常规套接字连接到 Radion 站,并将 json 消息输出到您的客户端。
    • 在任何情况下,您都不能直接从 javascript 执行此操作,因为它是未经过 base64 编码的二进制数据。
    • 谢谢胡安...您只是不考虑使用 Javascript 处理这些数据的想法...我无权运行 php 脚本 :(
    • 哇,-4,如果一位反对者解释这个答案有什么问题,那就太好了
    猜你喜欢
    • 1970-01-01
    • 2011-05-18
    • 2018-11-08
    • 2016-04-29
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多