Ajax请求后台,后台返回二进制数据,JS应该如何解析?

后台代码片段:

UtilHttp.streamContentToBrowser(response, UtilObject.getBytes(list), "application/octet-stream");

后台list:

clipboard.png

把list转byte[],再通过io流输出到浏览器,那么在前端通过JS改如何解析呢?
前台Ajax请求代码如下:

$.ajax({
        url: "../wfdurl/urlMenuReader.do",
        type: "post",
        async: false,
        data: {},
        dataType: "text",
        success: function(result) {
          console.log(result);
        },
        error: function(data) {
          alert("服务器繁忙,请稍后再试...");
        }
});

dataType: "text",得到的数据是乱码,如下图:

clipboard.png

求大牛指点啊...

根据大家指点,改成了原生XMLHttpRequest

      var oReq = new XMLHttpRequest();
      oReq.open("POST", "../wfdurl/urlMenuReader.do", true);
      oReq.responseType = "arraybuffer";

      oReq.onload = function (oEvent) {
        var arrayBuffer = oReq.response; // 注意:不是oReq.responseText
        if (arrayBuffer) {
          var byteArray = new Uint8Array(arrayBuffer);
          console.log('byteArray:' + byteArray);
          for (var i = 0; i < byteArray.byteLength; i++) {
            //...
          }
        }
      };

      oReq.send("type=" + obj.wFType + "&fornocache=QL8M4416");

byteArray: (不是想要的后台list

clipboard.png

阅读 7.9k
5 个回答

用原生的XMLHttpRequest,设置返回数据为buffer

后端在开玩笑鉴定完毕,二进制流可能是文本可能视频可能是图片怎么解析。

返回的数据里还有java.util这种?后台返回写崩了吧?(嗯,可以把后台按在地上摩擦了……)

新手上路,请多包涵

前段不要用ajax调用就可以直接拿到文件了
或者前段用Blob对象

这个问题去前段问啊

(你收到的类型可不是 text)

  • stream返回的是是buffer不是Array
    所以前端收到的是ArrayBuffer
    而不是普通的数组
  • 将ArrayBuffer转字符串toString后
    JSON.parse转json对象,应该就是你要的list数据了
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题