ajax接口接收文件排坑(二)

错误处理问题

假设后端传回了一段包含错误message字段的JSON文件,如果将responseType 设置为 blob 将会导致无法解析后端传回的错误数据。

解决方案是将responseType 设置为 arraybuffer,根据http状态码来判断接口是否报错。假设接口返回400则将返回数据由arraybuffer
重新解析为String 或 Object 等我们需要的数据类型。

解析代码如下

function errorCallback(response) {
  var encodedString = String.fromCharCode.apply(null, new Uint8Array(response.data));
  var decodedString = decodeURIComponent(escape(encodedString));
  var obj = JSON.parse(decodedString);
}

其中 var decodedString = decodeURIComponent(escape(encodedString));这段代码的作用是解析utf8字符。

参考文章

Conversion between UTF-8 ArrayBuffer and String

How to read JSON error response from $http if responseType is arraybuffer

作者

Micheal

发布于

2019-04-26

更新于

2023-04-12

许可协议

评论