Angular2 Http

1. 使用Http
绝大部分应用程序都会和后台服务打交道,Http是浏览器和服务器之间通讯的主要协议,通过Http调用来访问远程服务器上相应的 Web API。
HttpModule 并不是 Angular 的核心模块,通过Angular包中一个名叫 @angular/http 的独立附属模块发布了出来。我们的应用将会依赖于Angular的 http 服务,它本身又依赖于其它支持类服务。来自 @angular/http 库中的 HttpModule 保存着这些 HTTP 相关服务提供商的全集。
现代浏览器支持两种基Http的API : XMLHttpRequest (XHR) 和 JSONP 。少数浏览器还支持 Fetch 。在Angular中分别对应@angular/http 库中的HttpModule 和JsonpModule两个模块。
2. GET获取数据
为了能够使用XHR中的Get方法来获取数据信息,我们把 HttpModule 添加到 AppModule 的 imports 列表中,这样本应用程序的任何地方都可以访问XHR服务。
我们使用Http服务的实例中的get方法来执行http get方法获取数据,该方法的调用形式如下
get(url: string, options?: RequestOptionsArgs) : Observable<Response>
来看一个简单的例子,代码如下
@Component({
selector: 'demo',
template: '<button id="input" (click)="click()">Get Data</button>',
})
export class DemoComponent {
constructor(private http: Http) {
}
url: string = '/api/list';
click() {
this.http.get(this.url).subscribe(function (data) {
console.log(data)
})
}
}
我们在DemoComponent构造函数中采用DI获取了Http服务的实例http,当点击获取数据的按钮后,便能够通过Http实例中的get方法,根据其参数url地址及options?: RequestOptionsArgs参数来获取对应的数据信息。该方法返回的是一个可观察对象 (Observable),针对可观察对象,我们可以subscribe对应的方法,当数据返回后进行处理。
3. POST发送数据
同样的,为了能够使用XHR中的POST方法来获取数据信息,我们把 HttpModule 添加到 AppModule 的 imports 列表中,这样本应用程序的任何地方都可以访问XHR服务。
我们使用Http服务的实例中的post方法来执行http post方法获取数据,该方法的调用形式如下
post(url: string, body: any, options?: RequestOptionsArgs) : Observable<Response>
来看一个简单的例子,代码如下
@Component({
selector: 'demo',
template: '<button id="input" (click)="click()">Get Data</button>',
})
export class DemoComponent {
constructor(private http: Http) {
}
url: string = '/api/post';
click() {
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
this.http.post(this.url, JSON.stringify({ 'id': '1' }), options).subscribe(function (data) {
console.log(data)
})
}
}
我们在DemoComponent构造函数中采用DI获取了Http服务的实例http,当点击获取数据的按钮后,便能够通过Http实例中的get方法,根据其参数url地址, body:any及options?: RequestOptionsArgs参数来提交对应的数据信息,其中body表示传递到服务器端的数据信息。示例中,我们传递json格式的数据到服务器端,所以使用了'Content-Type': 'application/json'头信息进行包装。
该方法返回的是一个可观察对象 (Observable),针对可观察对象,我们可以subscribe对应的方法,当数据返回后进行处理。
4. JSONP获取数据
用 Angular Http 服务发起 XMLHttpRequests,是与服务器通讯时最常用的方法。但它不适合所有场景。
出于安全的考虑,网络浏览器会阻止调用与当前页面不“同源”的远端服务器的XHR。所谓源就是 URI 的协议 (scheme) 、主机名 (host) 和端口号 (port) 这几部分的组合。这被称为同源策略。
为了可以向不同源的服务器发起 XHR 请求,这时候就需要支持一种老的、只读的 ( 译注:即仅支持 GET) 备选协议,这就是 JSONP。
为了能够使用JSONP中的Get方法来获取数据信息,我们把 JsonpModule 添加到 AppModule 的 imports 列表中,这样本应用程序的任何地方都可以访问Jsonp服务。
Angular的Jsonp服务不但通过JSONP 扩展了Http 服务,而且限制我们只能用GET请求,调用的形式如下。
get(url: string, options?: RequestOptionsArgs) : Observable<Response>
我们来看一个例子,该示例和Http Get访问十分类似,
@Component({
selector: 'demo',
template: '<button id="input" (click)="click()">Get Data</button>',
})
export class DemoComponent {
constructor(private jsonp: Jsonp) {
}
url: string = '/api/list';
click() {
this.jsonp.get(this.url).subscribe((data) => {
console.log(data);
});
}
}
5. 结果处理
5.1 可观察对象
我们通过Http以及Jsonp的api接口可以知道,默认返回值都是可观察对象 Observable< Response >。可以把可观察对象 Observable 看做一个由某些“源”发布的事件流。 通过 订阅 到可观察对象 Observable ,我们监听(subscribe)这个流中的事件。 在这些订阅中,我们指定了当 Web 请求生成了一个成功事件 ( 有效载荷是英雄数据 ) 或失败事件 ( 有效载荷是错误对象 ) 时该如何采取行动,如示例中所示。
我们的服务可以返回 HTTP 响应对象Response。但这可不是一个好主意! 数据服务的重点在于,对消费者隐藏与服务器交互的细节。其实上,我们最关心的还是获取到的返回数据信息,这时候我们就可以利用RxJS库来对事件流进行一些额外的处理。
RxJS("Reactive Extensions" 的缩写)是一个被 Angular 认可的第三方库,它实现了异步可观察对象 (asynchronous observable) 模式。Rxjs库中包含很多对事件流进行处理的方法,例如map,distinctUntilChanged等操作符。
针对返回数据是json格式的响应对象,可以把Response解析成 JavaScript 对象——只要调一下 response.json() 就可以了,这时候我们就可以利用map操作符来进行处理,例如
this.jsonp.get(this.url)
.map((rsp:Response)=>{
return rsp.json()
})
.subscribe((data) => {
console.log(data);
});
5.2 Promise
虽然 Angular 的 http 客户端 API 返回的是 Observable<Response> 类型的对象,但我们也可以把它转成 Promise<Response>。这很容易,只需要调用可观察对象 Observable< Response >的方法toPromise()就能够进行转化。例如
this.jsonp.get(this.url)
.toPromise()
.then((rsp: Response) => {
console.log(rsp)
});
以上就是对Angular http json的讲解,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Angular
# http
# json
# json的详解
# json使用方法
# Nodejs如何使用http标准库异步加载https请求json数据
# 解决HttpPost+json请求---服务器中文乱码及其他问题
# 解决使用httpclient传递json数据乱码的问题
# PHP使用Http Post请求发送Json对象数据代码解析
# vue2.5.2使用http请求获取静态json数据的实例代码
# HTTP JSON接口模拟工具Interfake快速入门教程
# 的是
# 方法来
# 流进
# 应用程序
# 就可以
# 库中
# 我们可以
# 这时候
# 便能
# 列表中
# 方都
# 都是
# 是一个
# 成了
# 将会
# 这就是
# 如有
# 两种
# 依赖于
# 把它
相关文章:
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
招贴海报怎么做,什么是海报招贴?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
C++如何使用std::optional?(处理可选值)
宝塔新建站点为何无法访问?如何排查?
已有域名能否直接搭建网站?
如何批量查询域名的建站时间记录?
nginx修改上传文件大小限制的方法
简历在线制作网站免费版,如何创建个人简历?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站之星伪静态规则如何设置?
高防服务器租用如何选择配置与防御等级?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
Bpmn 2.0的XML文件怎么画流程图
建站之星安装模板失败:服务器环境不兼容?
制作农业网站的软件,比较好的农业网站推荐一下?
如何在Golang中引入测试模块_Golang测试包导入与使用实践
如何快速搭建高效WAP手机网站?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站主机如何选?高性价比方案全解析
,石家庄四十八中学官网?
如何生成腾讯云建站专用兑换码?
IOS倒计时设置UIButton标题title的抖动问题
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何通过VPS建站实现广告与增值服务盈利?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
如何快速上传建站程序避免常见错误?
如何自定义建站之星模板颜色并下载新样式?
如何快速搭建高效可靠的建站解决方案?
如何通过服务器快速搭建网站?完整步骤解析
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
如何快速启动建站代理加盟业务?
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
如何制作网站标识牌,动态网站如何制作(教程)?
建站之星安装路径如何正确选择及配置?
如何在橙子建站中快速调整背景颜色?
深圳网站制作案例,网页的相关名词有哪些?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何设置并定期更换建站之星安全管理员密码?
建站上传速度慢?如何优化加速网站加载效率?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何基于云服务器快速搭建个人网站?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
如何用VPS主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。