【发布时间】:2016-08-05 04:41:41
【问题描述】:
我有一个数据传入 NodeJS,然后需要将其提供给 Ajax 查询。但是由于 NodeJS 将其作为分块数据传输,因此没有一个通用的 Javascript/JQuery ajax 方法能够捕获数据包。
我怎样才能得到值
nodeJS:
http.createServer(options, (req, res) => {
msg = c++_to_javascript();
res.writeHead(200);
res.end(msg);
}).listen(89);
Javascript/JQuery:
以transfer encoded: chunked 接收数据,结果没有任何方法能够在 JS 中解码接收到的数据包。
我如何从 NodeJS 或 JS 中解决它?
尝试 1:失败
$.stream(javascript_to_c++,{
open:function(){
console.log("opened");
},
message:function(event){
console.log(event.data);
buf1 = buf1 + event.data;
},
error:function(){
console.log("error");
},
close:function(){
console.log("closed");
}
});
TRY2:失败
var test = $.ajax({
type: "GET",
url: javascript_to_c++,
async: false,
success:function(m) {
buf1 = buf1 + m;
}
}).responseText;
console.log(test);
尝试 3:失败
// Define a method to parse the partial response chunk by chunk
var last_index = 0;
function parse(xhr) {
var curr_index = xhr.responseText.length;
if (last_index == curr_index) return; // No new data
var s = xhr.responseText.substring(last_index, curr_index);
last_index = curr_index;
console.log(s);
}
function test() {
var xhr = new XMLHttpRequest();
var url = javascript_to_c++;
xhr.open("GET", url, true);
xhr.send();
// Check for new content every 5 seconds
var interval = setInterval(parse, 5000);
// Abort after 25 seconds
setTimeout(function(){
clearInterval(interval);
parse(xhr);
xhr.abort();
}, 25000);
}
test();
【问题讨论】:
-
Web 浏览器可以透明地处理分块传输。这里可能还有其他问题。分块传输不太可能是问题。
-
c++_to_javascript 的返回值是什么样的?另外,为什么 javascript_to_c++ 是您的 Ajax 调用的端点?
-
该代码不是在等待 ajax 调用完成,而是在 ajax 调用完成之前进行解析。如果他使用常规 ajax 调用,他将收到 100% 的消息,但他必须等待几分钟(直到服务器关闭连接)
-
你能比说“失败”更具体吗?究竟会发生什么?错误信息?如果是这样,那是什么。出乎意料的结果?如果有,是什么?
-
正如我之前提到的,这些都不是必需的。浏览器可以完美地处理传输编码。其他事情正在发生。传输编码不是问题。尝试使用
curl获取页面并发布结果。使用-v标志。
标签: javascript jquery ajax node.js google-chrome