ajax - 如何在客户端编写javascript来及时接收和解析 `chunked`响应?

标签 ajax chunked

我正在使用播放框架来生成分块响应。代码是:

class Test extends Controller {
    public static void chunk() throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            String data = repeat("" + i, 1000);
            response.writeChunk(data);
            Thread.sleep(1000);
        }
    }
}

当我使用浏览器访问时http://localhost:9000/test/chunk ,我可以看到显示的数据每秒增加。但是,当我编写一个 javascript 函数来接收和处理数据时,发现它会阻塞直到收到所有数据。

代码是:
$(function(){
    $.ajax(
        "/test/chunked", 
        {
            "success": function(data, textStatus, xhr) {
                alert(textStatus);
            }
        }
    );
});

当收到所有数据时,我可以看到 10 秒后弹出一个消息框。

如何获取流并及时处理数据?

最佳答案

jQuery 不支持,但你可以用普通的 XHR 来做到这一点:

var xhr = new XMLHttpRequest()
xhr.open("GET", "/test/chunked", true)
xhr.onprogress = function () {
  console.log("PROGRESS:", xhr.responseText)
}
xhr.send()

这适用于 all modern browsers ,包括 IE 10。W3C 规范 here .

这里的缺点是 xhr.responseText包含一个累积的响应。您可以在其上使用子字符串,但更好的主意是使用 responseType属性和使用 sliceArrayBuffer 上.

关于ajax - 如何在客户端编写javascript来及时接收和解析 `chunked`响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789703/

相关文章:

python - 如何强制 http.client 在 python 中发送分块编码的 HTTP 正文?

apache - 发送 HTTP 1.0 请求以避免处理 block

google-chrome - 打印 http block 及其到达时间

javascript - 如何在ajax中放置条件警报框

java - 分块输入流意外结束

javascript - 在jquery验证中添加方法

javascript - 如何使用 XMLHttpRequest 获取响应表单 servlet

ios - 取消 HTTP/1.1 分块响应并保持持久连接

javascript - jQuery .remove() 不工作

php - 从 jQuery 调用 PHP 函数?