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

标签 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);
}

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

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

最佳答案

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

您有两种解决方法:

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

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

    关于javascript - 如何在连接打开时清除 xml http (xhr) 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27479296/

    相关文章:

    javascript - dart,指定 web 的根文件夹

    php - AJAX 设置间隔

    javascript - Ajax 在新的 HTML 内容代码后始终返回 "1"

    java - 在 Java 中使用 BufferedReader 读取整个字符流

    Java Servlet 和 Java

    javascript - 在 jquery mobile 中动态选择组合框

    javascript - 通过 setinterval 循环执行函数

    javascript - 将通过 Ajax(和 Web 服务方法)获得的数组转换为 javascript 数组

    Java Servlet - 从 html 文件输入中获取 byte[] 内容

    javascript - D3.js 样式化突出显示的表格