Request
和 Response
都扩展了Body
。
要获取内容,请使用text()
方法。
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10')
.subscribe(response => console.log(response.text()))
该 API 在 Angular 5 中已被弃用。新的 HttpResponse<T>
类取而代之,并具有一个 .body()
方法。通过 {responseType: 'text'}
应该返回一个 String
。
以下是一个使用 Angular2 内置的 Response 获取响应正文的示例:
import { Injectable } from '@angular/core';
import {Http,Response} from '@angular/http';
@Injectable()
export class SampleService {
constructor(private http:Http) { }
getData(){
this.http.get(url)
.map((res:Response) => (
res.json() //Convert response to JSON
//OR
res.text() //Convert response to a string
))
.subscribe(data => {console.log(data)})
}
}
这里是一个 get
http 调用的例子:
this.http
.get('http://thecatapi.com/api/images/get?format=html&results_per_page=10')
.map(this.extractData)
.catch(this.handleError);
private extractData(res: Response) {
let body = res.text(); // If response is a JSON use json()
if (body) {
return body.data || body;
} else {
return {};
}
}
private handleError(error: any) {
// In a real world app, we might use a remote logging infrastructure
// We'd also dig deeper into the error to get a better message
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
请使用.get()
而不是.request()
。
如果需要,我还会提供额外的extractData
和handleError
方法。
text()
代替json()
。 - SrAxi我也遇到了同样的问题,这个方法对我有效,请尝试:
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
subscribe((res) => {
let resSTR = JSON.stringify(res);
let resJSON = JSON.parse(resStr);
console.log(resJSON._body);
})
响应数据以JSON字符串形式呈现。应用程序必须通过调用response.json()将该字符串解析为JavaScript对象。
this.http.request('http://thecatapi.com/api/images/get?format=html&results_per_page=10').
.map(res => res.json())
.subscribe(data => {
console.log(data);
})
https://angular.io/docs/ts/latest/guide/server-communication.html#!#extract-data
.subscribe(data => {
console.log(data);
let body:string = JSON.parse(data['_body']);`
response.json().then(function(data) { console.log(data);});
或者使用 ES6:
response.json().then((data) => { console.log(data) });
来源:https://developer.mozilla.org/en-US/docs/Web/API/Body/json
该函数默认返回一个Promise,但请注意,这可以很容易地转换为Observable以供下游使用(流双关语不是本意,但效果很好)。
如果不调用json()函数,数据,尤其是在尝试访问Response对象的_body属性时,将会以文本形式返回,如果您正在寻找一个深层次的对象(如具有属性或不能简单地转换为另一个对象的对象),这显然不是您想要的。
你不能直接引用_body
对象吗?显然,如果这样使用,它不会返回任何错误。
this.http.get('https://thecatapi.com/api/images/get?format=html&results_per_page=10')
.map(res => res)
.subscribe(res => {
this.data = res._body;
});
HttpResponse<any>
中使用 any
有更好的选项吗? - greenchapterHttpResponseBase
。 - greenchapter以下代码适用于所有版本的Angular:
let body = JSON.parse(JSON.stringify(response)).body;