这是我的目标。
我有一个jquery ajax post从mysql数据库返回输出。一个字段是二进制的。我希望使用Javascript来处理二进制字段。我一直在四处走动,尝试不同的方法,但这些方法看起来并不令人满意,而且大多数都遇到了障碍。
我可以将数据传递到base64编码,然后在Javascript中解码。
数据是一个数据包所以我希望使用DataView对其进行解码,因为它具有将数据视为数据包(如C结构)的所有Get ...调用。
我尝试过Blob和Typed Arrays,但是无论我走到哪里,它似乎都不是正确的。
我所追求的是这样的:
var ab = new ArrayBuffer ( atob( my_base64_encoded_packet_data )
var dv = new DataView ( ab );
简单!不。我设法接近的唯一方法是使用fileReader,就像这样(粗略地):
fileReader.onload = function ( ) {
var newBuf = this.result;
callback( newBuf );
return;
};
fileReader.readAsArrayBuffer( buf );
其中buf是blob而newBuf是ArrayBuffer。
这是另一种方法,可以满足我的需要,但似乎是劳动密集型的。
function str2ab(str) {
var buf = new ArrayBuffer(str.length);
var bufView = new Uint8Array(buf);
for (var i=0, var strLen=str.length; i<strLen; i++) {
bufView[i] = str.charCodeAt(i);
}
return buf;
}
请帮助。感谢
答案 0 :(得分:0)
问题是你正在使用jQuery的ajax。 jQuery无法处理二进制文件,因为它希望所有内容都是字符串。浏览器会尝试使用它,并尝试转换响应,如果您希望将其作为文本接收
您想要的是原始二进制文件,因此arraybuffer
或blob
responseType就是您想要的。
解决方案是坚持手动执行xhr或使用新的获取方法
fetch(url, opts).then(res => res.arrayBuffer()).then(buffer => {
// code here
})