XMLHttpRequest分块响应,只读取正在进行的最后一个响应
XMLHttpRequest chunked response, only read last response in progress
我正在将NodeJS应用程序中的分块数据发送回浏览器。块实际上是json字符串。我遇到的问题是,每次调用onprogress
函数时,它都会添加一个完整数据字符串。这意味着第二个响应块被附加到第一个响应块,依此类推。我只想得到"刚刚"收到的块。
这是代码:
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的内容还包含第一个和第二个响应的响应文本。我已经检查了服务器发送的内容,看起来没有问题。将Node与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/
相关文章:
- 如何清除正在进行的所有JQuery
- 终止所有正在进行的XHR请求
- 如何避免$digest正在进行中的错误
- 如何使用 javascript 停止对 asp.net 进行正在进行的回发(长时间运行的执行)
- 快递:我无法获得Passport来验证登录.注册正在进行,但您可以帮助护照登录验证吗
- Twilio:第三个来电者可以闯入正在进行的通话
- 如何在另一个动画正在进行时延迟运行动画
- 通过 http 响应 Angular2 进行迭代
- 当我调用其他提交函数时,$anchorScroll正在进行第二次单击
- 在单击按钮时取消正在进行的 JavaScript 介绍
- 我正在进行在线测试,一切都完成了.但是我的自动提交计时器不起作用
- jQuery - 停止正在进行的动画(淡出),并在鼠标快速进入/离开时再次显示
- IE8 支持使用响应.js进行媒体查询
- 正在进行DOM回流/刷新
- 正在进行中的 Ajax 请求突然开始返回状态 = 0
- AngularJS:你能得到一个'正在进行的摘要'来自多个$scope的错误$apply()调用
- 如何中止/停止正在进行的Amazon AWS s3上传
- 如何停止数据表实例已启动的所有当前正在进行的 Ajax 查询
- XMLHttpRequest分块响应,只读取正在进行的最后一个响应
- 当Javascript进程正在进行时,浏览器没有响应点击