Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在连接打开时清除xml http(xhr)响应_Javascript_Ajax_Servlets - Fatal编程技术网

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

Javascript 如何在连接打开时清除xml http(xhr)响应,javascript,ajax,servlets,Javascript,Ajax,Servlets,在我的servlet中,我设置以下内容,并在每一秒钟将数据刷新到响应的outputstream response.setContentType("text/html"); response.addHeader("Connection", "Keep-Alive"); response.addHeader("Transfer-Encoding", "chunked"); while(true){ Thread.sleep(1000); resOut.write(hello);

在我的servlet中,我设置以下内容,并在每一秒钟将数据刷新到响应的outputstream

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对象上将ResponseType设置为arrybuffer或blob等,我会看到null,直到响应流按预期从服务器关闭


那么,如何在中间阶段清除responseText(_readonly),或者在连接打开时使用arraybuffer和receive chunk使html页面上的数据可用?

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

您有两种解决方法:

  • 您可以使用超时并请求刷新,因此需要服务器上的伪状态(使用操作id和“内容已刷新”的标志)-长/短轮询技术
  • 或者使用。你可以在套接字上写一个块,客户端接收它并用它做它想做的任何事情。如果你有使用其他编程语言的套接字的经验,你会发现它很容易理解。但是要小心,有些浏览器(我这里说的是IE)不这样做

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

    谢谢,使用WebSockets,其他方法似乎都是死路一条,如果您有任何使用xhr流的工作模型,请告诉我。不客气!谢谢您接受回复。遗憾的是,我没有。在所有的网站上我参与的项目、web sockets和Signal已经足够了:(