加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 如何在客户端写javascript来接收和解析`chunked’响应及

发布时间:2020-12-16 03:16:02 所属栏目:百科 来源:网络整理
导读:我使用play框架,生成分块响应。代码是: 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);
我使用play框架,生成分块响应。代码是:
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);
            }
        }
    );
});

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

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

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属性并使用ArrayBuffer上的slice。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读