javascript - Cómo leer la respuesta de error JSON desde $ http si responseType es arraybuffer
responsetype arraybuffer (3)
Cargué algunos datos binarios usando
$http.post(url, data, { responseType: "arraybuffer" }).success(
function (data) { /* */ });
En caso de error, el servidor responde con un objeto JSON de error como
{ "message" : "something went wrong!" }
¿Hay alguna forma de obtener la respuesta de error en un tipo diferente al de una respuesta exitosa?
$http.post(url, data, { responseType: "arraybuffer" })
.success(function (data) { /* */ })
.error(function (data) { /* how to access data.message ??? */ })
Edición: como señala @Paul LeBeau, mi respuesta asume que la respuesta está codificada en ASCII.
Básicamente, solo necesitas decodificar el ArrayBuffer en una cadena y usar JSON.parse ().
var decodedString = String.fromCharCode.apply(null, new Uint8Array(data));
var obj = JSON.parse(decodedString);
var message = obj[''message''];
Realicé pruebas en IE11 y Chrome y esto funciona bien.
La respuesta de @ smkanadl asume que la respuesta es ASCII. Si su respuesta está en otra codificación, entonces eso no funcionará.
Los navegadores modernos (por ejemplo, FF y Chrome, pero no IE aún) ahora admiten la interfaz TextDecoder
que le permite decodificar una cadena desde un ArrayBuffer
(a través de un 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);
}
Suponga que en su servicio, tiene una función que está utilizando como, Esto es para Angular 2
someFunc (params) {
let url = ''YOUR API LINK'';
let headers = new Headers();
headers.append(''Content-Type'', ''application/json'');
headers.append(''Authorization'',''Bearer ******'');
return this._http
.post(url, JSON.stringify(body), { headers: headers})
.map(res => res.json());
}
Asegúrese de que cuando lo devuelva es res.json () y no res.json. Espero que ayude, a cualquiera que tenga este problema