XMLHttpRequest 分块响应,只读取正在进行的最后一个响应
XMLHttpRequest chunked response, only read last response in progress
我正在将分块数据从 NodeJS 应用程序发送回浏览器。这些块实际上是 json 个字符串。我遇到的问题是每次调用 onprogress
函数时,它都会添加一个完整数据的字符串。这意味着第二个响应块附加到第一响应块,依此类推。我只想获得 "just now" 收到的块。
代码如下:
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("...")
发送几次。另外 headers 设置如下:
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/
我正在将分块数据从 NodeJS 应用程序发送回浏览器。这些块实际上是 json 个字符串。我遇到的问题是每次调用 onprogress
函数时,它都会添加一个完整数据的字符串。这意味着第二个响应块附加到第一响应块,依此类推。我只想获得 "just now" 收到的块。
代码如下:
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("...")
发送几次。另外 headers 设置如下:
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/