【问题标题】:IE7/8 responseText in readyState 3 not availablereadyState 3 中的 IE7/8 responseText 不可用
【发布时间】:2011-05-08 16:33:46
【问题描述】:

我用 tornado 编写了一个应用程序,以支持通过 HTTP 流在我的网站上进行实时更新。它适用于除 IE7 和 IE8 之外的所有浏览器。下面是处理 HTTP 流的代码:

... code to create xhr object
xhr.open('GET', 'http://192.168.0.173:8888', true);
xhr.onreadystatechange = function() {
        if(xhr.readyState == 3 && xhr.status==200) {
        try {
            alert(xhr.responseText);
        } catch(e) {
            alert("noo");
        }
    }
}
setTimeout("xhr.send(null);", 1000);

问题是当readyState为3时xhr.responseText不可用。经过几个小时的google,我了解到IXMLHTTPRequest.responseStream。我尝试使用

xhr = new ActiveXObject("MSXML2.XMLHTTP.3.0");

但结果相同。请求发送到服务器,readyState 为 3,但 xhr.responseStream 不可用。

有什么想法吗?或者当我检测到 IE 时我应该退回到长轮询?

谢谢

亨利

【问题讨论】:

  • 您是否考虑过使用跨浏览器提供一致功能的 JS 框架?
  • 我试过 jQuery 和 YUI 但他们似乎不支持这个。你知道支持 HTTP 流的吗?
  • 我记得在某处读到过,在使用 onreadystatechange 事件时,您不能保证每次都能命中 readyState

标签: javascript http streaming comet


【解决方案1】:

如果您再次阅读您的linked page

相比之下,Microsoft XML (MSXML) 版本的 IXMLHTTPRequest 接口通过 responseStream 属性公开部分结果,Windows Internet Explorer 本机版本没有实现。请注意,此行为也不同于 IServerXMLHTTPRequest 接口,后者向 responseBody 和 responseText 提供部分结果。

也就是说,我想,这是一种不必要的复杂说法,这件事存在,但我们不这样做。没用的IE。我只需要实现同样的事情,最终只能退回到 IE 的长轮询。

The Dojo foundation 使用 Bayeux 的 Cometd。但我相信目前只有 Jetty 实现了 Bayeux 协议。

总之,IE,DIAF。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2014-05-28
    • 2014-12-17
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多