【问题标题】:how to clear xml http (xhr) response while connection is open如何在连接打开时清除 xml http (xhr) 响应
【发布时间】:2015-02-13 06:26:57
【问题描述】:

在我的 servlet 中,我正在设置以下内容,并且每秒钟我都会将数据刷新到响应的输出流中

response.setContentType("text/html");
response.addHeader("Connection", "Keep-Alive");
response.addHeader("Transfer-Encoding", "chunked");

while(true){
    Thread.sleep(1000);
    resOut.write(hello);
    resOut.flush();
}

在我的客户端 javascript 我有 ajax

xmlhttp.onprogress = function() {
    alert(xmlhttp.responseText);
}

浏览器正在接收刷新的数据并且警报正在触发,但我面临的问题是 responseText 出来的对象太大而不是块,如果我尝试在 xmlhttp 上将 reponseType 设置为 arrybuffer 或 blob 等对象,我看到 null 直到响应流按预期从服务器关闭。

那么如何在中间阶段清除responseText(_read only) 或者能够使用arraybuffer 和接收块来使数据在连接打开时在html 页面上可用?

【问题讨论】:

    标签: javascript ajax servlets


    【解决方案1】:

    据我所知,这就是 HTTP 协议的工作原理。在一切完成之前,您将无法读取响应(或其中的块)。

    您有两种解决方法:

    1. 您要么使用超时并请求刷新,因此您需要服务器上的伪状态(使用操作 ID 和“内容已刷新”的标志)-(长/短)[http://techoctave.com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery] 轮询技术。
    2. 或使用websockets。您可以在套接字上写一个块,客户端接收它并用它做任何事情。如果您有使用其他编程语言的套接字的经验,您会发现它很容易理解。但请注意,某些浏览器(我这里指的是 IE)不支持support it

    这里可能有 3,但取决于您使用的服务器语言。我是 .NET 开发人员,我只知道 SignalR。

    【讨论】:

    • 谢谢,使用 WebSockets,其他方式似乎都是死路一条,如果您有任何使用 xhr 流的工作模型,请告诉我。
    • 不客气!并感谢您接受回复。可悲的是,我没有。在我从事的所有项目中,Web 套接字和 SignalR 已经绰绰有余:(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多