浅谈AngularJS中$http服务的简单用法


Posted in Javascript onMay 15, 2018

我们可以使用内置的$http服务直接同外部进行通信。$http服务只是简单的封装了浏览器原生的XMLHttpRequest对象。

1、链式调用

$http服务是只能接受一个参数的函数,这个参数是一个对象,包含了用来生成HTTP请求的配置内容。这个函数返回一个promise对象,具有success和error两个方法。

$http({
url:'data.json',
method:'GET'
}).success(function(data,header,config,status){
//响应成功

}).error(function(data,header,config,status){
//处理响应失败
});

2、返回一个promise对象

var promise=$http({
method:'GET',
url:"data.json"
});

由于$http方法返回一个promise对象,我们可以在响应返回时用then方法来处理回调。如果使用then方法,会得到一个特殊的参数,它代表了相应对象的成功或失败信息,还可以接受两个可选的函数作为参数。或者可以使用success和error回调代替。

promise.then(function(resp){
//resp是一个响应对象

},function(resp){
//带有错误信息的resp

});

或者这样:

promise.success(function(data,status,config,headers){
//处理成功的响应
});

promise.error(function(data,status,hedaers,config){
//处理失败后的响应
});

then()方法与其他两种方法的主要区别是,它会接收到完整的响应对象,而success()和error()则会对响应对象进行析构。

3、快捷的get请求

①$http.get('/api/users.json');

get()方法返回HttpPromise对象。

还可以发送比如:delete/head/jsonp/post/put 函数内可接受参数具体参照148页

②以再发送jsonp请求举例说明: 为了发送JSONP请求,其中url必须包含JSON_CALLBACK字样。

jsonp(url,config) 其中config是可选的

var promise=$http.jsonp("/api/users.json?callback=JSON_CALLBACK");

4、也可以将$http当做函数来使用,这时需要传入一个设置对象,用来说明如何构造XHR对象。

$http({
method:'GET',
url:'/api/users.json',
params:{
'username':'tan'
});

其中设置对象可以包含以下主要的键:

①method

可以是:GET/DELETE/HEAD/JSONP/POST/PUT

②url:绝对的或者相对的请求目标

③params(字符串map或者对象)

这个键的值是一个字符串map或对象,会被转换成查询字符串追加在URL后面。如果值不是字符串,会被JSON序列化。

比如这个:

//参数会转为?name=ari的形式
$http({
params:{'name':'ari'}
});

④data(字符串或者对象)

这个对象中包含了将会被当作消息体发送给服务器的数据。通常在发送POST请求时使用。

从AngularJS 1.3开始,它还可以在POST请求里发送二进制数据。要发送一个blob对象,你可以简单地通过使用data参数来传递它。

例如:

var blob=new Blob(['Hello world'],{type:'text/plain'});
$http({
method:'POST',
url:'/',
data:blob
});

4、响应对象

AngularJS传递给then()方法的响应对象包含了四个属性。

◇data:这个数据代表转换过后的响应体(如果定义了转换的话)

◇status:响应的HTTP状态码

◇headers:这个函数是头信息的getter函数,可以接受一个参数,用来获取对应名字值

例如,用如下代码获取X-Auth-ID的值:

$http({
method: 'GET',
url: '/api/users.json'
}).then (resp) {
// 读取X-Auth-ID
resp.headers('X-Auth-ID');
});

◇config:这个对象是用来生成原始请求的完整设置对象。

◇statusText(字符串):这个字符串是响应的HTTP状态文本。

5、缓存HTTP请求

默认情况下,$http服务不会对请求进行本地缓存。在发送单独的请求时,我们可以通过向$http请求传入一个布尔值或者一个缓存实例来启用缓存。

$http.get('/api/users.json',{ cache: true })
.success(function(data) {})
.error(function(data) {});

第一次发送请求时,$http服务会向/api/users.json发送一个GET请求。第二次发送同一个GET请求时,$http服务会从缓存中取回请求的结果,而不会真的发送一个HTTP GET请求。
在这个例子里,由于设置了启用缓存,AngularJS默认会使用$cacheFactory,这个服务是AngularJS在启动时自动创建的。

如果想要对AngularJS使用的缓存进行更多的自定义控制,可以向请求传入一个自定义的缓存实例代替true。

学习angular,个人推荐书籍《AngularJS权威教程》电子PDF版地址如下: https://3water.com/books/255696.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 获得选中文本内容的方法
Feb 15 Javascript
JavaScript判断DOM何时加载完毕的技巧
Nov 11 Javascript
js控制容器隐藏出现防止样式变化的两种方法
Apr 25 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
javascript 动态创建表格
Jan 08 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
mpvue将vue项目转换为小程序
Sep 30 Javascript
详解服务端预渲染之Nuxt(介绍篇)
Apr 07 Javascript
JS实现提示框跟随鼠标移动
Aug 27 Javascript
微信小程序 根据不同用户切换不同TabBar
Apr 21 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 #Javascript
解决linux下node.js全局模块找不到的问题
May 15 #Javascript
vue :src 文件路径错误问题的解决方法
May 15 #Javascript
利用npm 安装删除模块的方法
May 15 #Javascript
vux uploader 图片上传组件的安装使用方法
May 15 #Javascript
使用webpack搭建react开发环境的方法
May 15 #Javascript
浅谈Node.js 沙箱环境
May 15 #Javascript
You might like
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
php生成带logo二维码方法小结
2016/04/08 PHP
解决Yii2邮件发送结果返回成功,但接收不到邮件的问题
2017/05/23 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
Js实现滚动变色的文字效果
2014/06/16 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
vue v-model表单控件绑定详解
2017/05/17 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
JS监听事件的叠加和移除功能
2018/11/19 Javascript
JavaScript ES6常用基础知识总结
2019/02/09 Javascript
微信JS-SDK updateAppMessageShareData安卓不能自定义分享详解
2019/03/29 Javascript
jQuery实现带3D切割效果的轮播图功能示例【附源码下载】
2019/04/04 jQuery
layui使用label标签的方法
2019/09/14 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
Python实现模拟时钟代码推荐
2015/11/08 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
Python爬虫中urllib库的进阶学习
2018/01/05 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
css3 给背景设置渐变色的方法
2019/09/12 HTML / CSS
兰蔻加拿大官方网站:Lancome加拿大
2016/08/05 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
自我鉴定范文
2013/11/10 职场文书
对公司合理化的建议书
2014/03/12 职场文书
国窖1573广告词
2014/03/21 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
博士论文答辩开场白
2015/06/01 职场文书
退休欢送会致辞
2015/07/31 职场文书
2019年二手房买卖合同范本
2019/10/14 职场文书