Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript XMLHttpRequest分块响应,仅读取正在进行的最后一个响应_Javascript_Node.js_Xmlhttprequest_Chunked - Fatal编程技术网

Javascript XMLHttpRequest分块响应,仅读取正在进行的最后一个响应

Javascript XMLHttpRequest分块响应,仅读取正在进行的最后一个响应,javascript,node.js,xmlhttprequest,chunked,Javascript,Node.js,Xmlhttprequest,Chunked,我将从NodeJS应用程序向浏览器发送分块数据。这些块实际上是json字符串。我遇到的问题是,每次调用onprogress函数时,它都会添加一个完整数据字符串。这意味着响应块2被附加到响应块1,依此类推。我只想得到“刚才”收到的块 代码如下: console.log("Start scan..."); var xhr = new XMLHttpRequest(); xhr.responseType = "text"; xhr.open("GET", "/serve

我将从NodeJS应用程序向浏览器发送分块数据。这些块实际上是json字符串。我遇到的问题是,每次调用
onprogress
函数时,它都会添加一个完整数据字符串。这意味着响应块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的内容也包含第一个和第二个响应的响应文本。我已经检查了服务器发送的内容,看起来没有问题。将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();

启发,这不是
onprogress xhr.responseText
API的工作方式。也许JSONify传递到
onprogress
函数调用中的所有参数?也许这有助于找到其他字段来帮助实现目标,或者跟踪到目前为止处理的总字节数,并自己切割字符串/二进制数据?FWIW您真的不应该自己从应用程序中设置
传输编码
头。这应该是一个透明的问题,XHR本身可以更好地处理,这有助于它正确处理不同的HTTP版本和其他与传输相关的问题。