我正在将分块数据从 NodeJS 应用程序发送回浏览器。这些 block 实际上是 json 字符串。我遇到的问题是每次调用 onprogress 函数时,它都会添加一个完整数据的字符串。这意味着第二个响应 block 附加到第一响应 block ,依此类推。我只想获得“刚刚”收到的数据 block 。

代码如下:

    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/


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!