请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()
请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,然后我使用pako.inflate() 返回的还是一样的数据
let socket = new WebSocket("wss://api-aws.huobi.pro/ws"); socket.onopen = function(e) {
alert(" 连接已建立");
var data = {
"sub": "market.btcusdt.ticker"
}
socket.send('"sub": "market.btcusdt.ticker"');
console.log(data)
};
const pako = require('pako'); //引入
socket.onmessage = function(event) {
console.log(`接收到数据: ${event.data}`);
// console.log(event)
if (event.data instanceof Blob) {
let result = '';
let reader = new FileReader();
console.log( reader) //这里面的result打印出是 "\u001f\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000-ÊK
//FileReader:从Blob对象中读取数据
reader.onload = function() {
result = JSON.parse(pako.inflate(reader.result, {
to: 'string'
}));
// console.log(result)
//pako.inflate()对数据进行解压,得到正常的json对象
if (result.ping) {
socket.send(JSON.stringify({
pong: result.ping
}));
//响应服务器,避免断开连接
}
}
reader.readAsBinaryString(event.data);
//将返回的数据解析为字符串格式 这里打印上面这个没有反应
}
};
websocket他请求返回的原样子
数据格式 这是打印reader的数据
下面这个是打印出来的event的数据
请教一下 这是为什么 这个方法我也是网上百度到的 说要这么解决 但是我解决出来 数据还是没有变成字符串
补充的::::::: 打印 reader.result
我如果下面是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式
如是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式
reader.result------arraybuffer
回答:
感觉是调用错函数了,你调用的是 reader.readAsArrayBuffer()
吗?试试:
reader.readAsArrayBuffer(event.data);reader.onload = function() {
result = JSON.parse(pako.inflate(reader.result, {
to: 'string'
}));
以上是 请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate() 的全部内容, 来源链接: utcz.com/p/936583.html