han*_*aad 42 javascript angularjs angular-http
我使用加载一些二进制数据
$http.post(url, data, { responseType: "arraybuffer" }).success(
function (data) { /* */ });
Run Code Online (Sandbox Code Playgroud)
如果出现错误,服务器会响应错误的JSON对象
{ "message" : "something went wrong!" }
Run Code Online (Sandbox Code Playgroud)
有没有办法以不同于成功响应的类型获取错误响应?
$http.post(url, data, { responseType: "arraybuffer" })
.success(function (data) { /* */ })
.error(function (data) { /* how to access data.message ??? */ })
Run Code Online (Sandbox Code Playgroud)
smk*_*adl 57
编辑:正如@Paul LeBeau指出的那样,我的回答是假设响应是ASCII编码的.
基本上你只需要将ArrayBuffer解码为一个字符串并使用JSON.parse().
var decodedString = String.fromCharCode.apply(null, new Uint8Array(data));
var obj = JSON.parse(decodedString);
var message = obj['message'];
Run Code Online (Sandbox Code Playgroud)
我在IE11和Chrome中运行测试,这很好用.
Pau*_*eau 22
@ smkanadl的答案假设响应是ASCII.如果您的响应采用其他编码,那么这将无效.
现代浏览器(例如FF和Chrome,但还没有IE)现在支持TextDecoder允许您从ArrayBuffer(通过a DataView)解码字符串的界面.
if ('TextDecoder' in window) {
// Decode as UTF-8
var dataView = new DataView(data);
var decoder = new TextDecoder('utf8');
var response = JSON.parse(decoder.decode(dataView));
} else {
// Fallback decode as ASCII
var decodedString = String.fromCharCode.apply(null, new Uint8Array(data));
var response = JSON.parse(decodedString);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14900 次 |
| 最近记录: |