我有以下XMLHttpRequest
代码:
req.open("GET", url, true);
req.responseType = "arraybuffer";
req.onreadystatechange = function () {
if (req.readyState != 4) return;
if (req.status != 200 && req.status != 304) {
alert('HTTP Error ' + req.status);
return;
}
// check the end of response for "Error:(0|1)" and remove it if match found
blob = new Blob([req.response], {type: "audio/mpeg"});
saveAs(blob, "test.mp3");
}
但是从服务器发送的内容可能包含此二进制文件末尾7个字符的附加状态消息“Error:(0|1)
”,我需要检查并在找到之前将其删除到blob,如上面的代码所示。
获取和删除此状态消息的最有效方法是什么?如果存在?
答案 0 :(得分:1)
您可以使用缓冲区的slice
方法和String.fromCharCode
来获取字符串:
var end = new Uint8Array(req.response.slice(-7));
var endStr = String.fromCharCode.apply(String, end);
if (endStr == "Error:1")
throw new Error("some problems");
var res = [endStr == "Error:0" ? req.response.slice(0, -7) : req.response];
var blob = new Blob(res, {type: "audio/mpeg"});
答案 1 :(得分:0)
Blob
个对象有一个名为slice()
的方法。
我会为最后11个字节做一个切片(该状态消息长度为11个字节),将它保存在var上并检查var是否等于“Error:(0|1)
”,如果是,那么我会使用再次切片以删除11个字节。