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