Angulaire 2: Comment faire pour accéder à un corps de la réponse HTTP?
J'ai écrit le code suivant dans Angulaire 2:
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
subscribe((res: Response) => {
console.log(res);
})
Lorsque j'imprime la réponse que je reçois dans la console:
Je veux avoir accès dans le code de champ corps de la réponse. Le champ "body" commence par un trait de soulignement, ce qui signifie que c'est un domaine privé. Quand je l'ai changer en " console.log(res._body) " j'ai eu une erreur.
Connaissez-vous une fonction get qui peut m'aider ici?
- Voir ici, stackoverflow.com/a/44622319/2803344, vous pouvez utiliser
res.json().results
pour obtenir le tableau retourné.
Vous devez vous connecter pour publier un commentaire.
Les deux
Demande
etRéponse
étendreCorps
.Pour obtenir le contenu, utilisez la
text()
méthode.Que l'API a été déprécié dans Angulaire 5. La nouvelle
HttpResponse<T>
classe au lieu de cela a un.body()
méthode. Avec un{responseType: 'text'}
qui devrait retourner uneString
.Voici un exemple de accès au corps de la réponse à l'aide de angular2 construit en Réponse
res.json()
plus.Voici un exemple d'un
get
appel http:Note
.get()
au lieu de.request()
.Je voulais aussi vous fournir des extra
extractData
ethandleError
méthodes dans le cas où vous en avez besoin et vous ne les avez pas.text()
au lieu dejson()
.Les données de réponse sont en JSON forme d'une chaîne. L'application doit analyser cette chaîne en JavaScript objets en appelant la réponse.json().
https://angular.io/docs/ts/latest/guide/server-communication.html#!#extrait de données
J'ai eu le même problème et cela a fonctionné pour moi d'essayer:
Ne pouvez-vous pas seulement se référer à la
_body
objet directement? Apparemment, il ne retourne pas les erreurs si utilisé de cette façon.Travail plunker
Malheureusement, la plupart des réponses indiquent simplement comment accéder à la Réponse du corps comme texte. Par défaut, le corps de la réponse de l'objet est un texte, pas un objet qu'il est adopté par un ruisseau.
Ce que vous cherchez est le json() la fonction de l'Organisme objet de la propriété sur l'objet de Réponse. MDN l'explique beaucoup mieux que moi:
La json() méthode de l'Organisme mixin prend un flux de Réponse et le lit à la fin. Elle renvoie une promesse qui se résout avec le résultat de l'analyse du corps du texte sous forme de JSON.
ou à l'aide de ES6:
Source: https://developer.mozilla.org/en-US/docs/Web/API/Body/json
Cette fonction renvoie une Promesse par défaut, mais notez que cela peut être facilement converti en une Observables pour la consommation en aval (stream jeu de mots pas l'intention, mais fonctionne très bien).
Sans invoquer le json() de la fonction, les données, surtout lorsque l'on cherche à accéder à la _body propriété de l'objet de Réponse, seront retournés sous forme de texte, ce qui n'est évidemment pas ce que vous voulez si vous êtes à la recherche d'un profond objet (comme dans un objet avec des propriétés, ou que ne peut pas simplement être converti en une autre objection).
Exemple de réponse objets
C'est un travail à 100% pour moi :
Cela devrait fonctionner. Vous pouvez obtenir le corps à l'aide de la réponse.json() si sa réponse json.
Response
est un type, pas une valeur. Vous ne pouvez pas appeler des méthodes sur elle.Response
est une fonction, pas un type.