Angular Response.json()没有记录

时间:2016-12-24 02:42:08

标签: json angular

我看到Response.json()方法被大量使用,我自己也在使用它,但要么我缺少某些内容,要么Response类的文档不正确。

示例:

getCurrentTime() {
    return this._http.get('http://date.jsontest.com/')
        .map((res:Response) => res.json())
}

https://angular.io/docs/ts/latest/api/http/index/Response-class.html的Angular站点上,我没有看到该方法是Response类的成员。

如果.json 不是是Response类的成员,那么有人可以指出我理解其工作原理的方向。

如果文档有误,请有人这样说。

提前致谢。

3 个答案:

答案 0 :(得分:18)

我看到API Reference for Response,您会看到<script> export default { data: function () { return { handle: 'model' } } }; </script> 延伸Response。如果您尝试搜索Body,则无法找到它,这可能意味着它不公开。如果您查看the source code for Body,就会看到Body的代码

json

如果您需要解释来源,请告诉我。这对我来说看起来很自我解释。

答案 1 :(得分:10)

实际上,HTTP客户端文档(Process the response object)  表示:

  

解析为JSON

     

这不是Angular自己的设计。 Angular HTTP客户端遵循Fetch函数返回的响应对象的Fetch规范。该规范定义了一个json()方法,它将响应主体解析为JavaScript对象。

因此,Angular2实现了Fetch Specification,其中包括所提到的Body mixin的规范,Angular2的Response类正在扩展,包括.json()方法。

  

json()方法在调用时必须返回使用JSON运行使用体的结果。

正如您在peeskillet的链接中所看到的,Angular2正在实现Body mixin的所有指定方法,formData()除外。

答案 2 :(得分:1)

我遇到了同样的问题,这就是错误消失的方式: 在新版本的Angular 4+中,您需要从以下位置导入rxjs:

import { map } from 'rxjs/operators';

而不是从导入:

import 'rxjs/add/operator/map';

接下来,将.get()更改为.get(),并且还必须使用管道将角度4+设置为如下所示:

getCurrentTime() {
    return this._http.get<any>('http://date.jsontest.com/')
        .pipe(map((res:Response) => res.json()));
}

希望有帮助...!