XMLHttpRequest分块响应,只读最后一个响应

我将一个NodeJS应用程序的分块数据发送回浏览器。 这些块真的是jsonstring。 我遇到的问题是,每次调用onprogress函数时,都会添加一个完整数据的string。 意味着响应块号码2被附加到响应块号码1,依此类推。 我只想得到“刚才”收到的大块。

代码如下:

  console.log("Start scan..."); var xhr = new XMLHttpRequest(); xhr.responseType = "text"; xhr.open("GET", "/servers/scan", true); xhr.onprogress = function () { console.log("PROGRESS:", xhr.responseText); } xhr.send(); 

所以实际上,当第三个响应到来时,xhr.responseText的内容也包含第一个和第二个响应的响应文本。 我已经检查过服务器发送了什么,而且看起来没有问题。 使用带有Express的节点,并使用res.send("...")发送几次。 还标题设置如下所示:

 res.setHeader('Transfer-Encoding', 'chunked'); res.setHeader('X-Content-Type-Options', 'nosniff'); res.set('Content-Type', 'text/json'); 

这种基于索引的方法适用于我:

 var last_index = 0; var xhr = new XMLHttpRequest(); xhr.open("GET", "/servers/scan"); xhr.onprogress = function () { var curr_index = xhr.responseText.length; if (last_index == curr_index) return; var s = xhr.responseText.substring(last_index, curr_index); last_index = curr_index; console.log("PROGRESS:", s); }; xhr.send(); 

启发https://friendlybit.com/js/partial-xmlhttprequest-responses/