如何在连接打开时清除xml http(xhr)响应

时间:2014-12-15 07:34:21

标签: javascript ajax servlets

在我的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);
}

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

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

1 个答案:

答案 0 :(得分:0)

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

您有2个解决方法:

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