修剪二进制XMLHttpRequest响应的结束

时间:2013-07-15 17:15:08

标签: javascript jquery

我有以下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,如上面的代码所示。

获取和删除此状态消息的最有效方法是什么?如果存在?

2 个答案:

答案 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个字节。