Je charge des données binaires en utilisant
$http.post(url, data, { responseType: "arraybuffer" }).success(
function (data) { /* */ });
En cas d'erreur, le serveur répond par un objet d'erreur JSON tel que
{ "message" : "something went wrong!" }
Existe-t-il un moyen d'obtenir une réponse d'erreur d'un type différent de celui d'une réponse de réussite?
$http.post(url, data, { responseType: "arraybuffer" })
.success(function (data) { /* */ })
.error(function (data) { /* how to access data.message ??? */ })
Edit: Comme le souligne @Paul LeBeau, ma réponse suppose que la réponse est codée ASCII.
En gros, il vous suffit de décoder le ArrayBuffer en une chaîne et d’utiliser JSON.parse ().
var decodedString = String.fromCharCode.apply(null, new Uint8Array(data));
var obj = JSON.parse(decodedString);
var message = obj['message'];
J'ai exécuté des tests dans IE11 et Chrome et cela fonctionne très bien.
La réponse de @ smkanadl suppose que la réponse est ASCII. Si votre réponse est dans un autre encodage, cela ne fonctionnera pas.
Les navigateurs modernes (par exemple, FF et Chrome, mais pas encore IE) supportent désormais l'interface TextDecoder
qui vous permet de décoder une chaîne d'une ArrayBuffer
(via une 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);
}
Supposons que, dans votre service, vous utilisiez une fonction telle que, ceci est pour 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());
}
Assurez-vous que, lorsque vous le renvoyez, il s'agit de res.json () et non de res.json . J'espère que cela aidera, à quiconque ayant ce problème