浅谈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 相关文章推荐
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
Mar 16 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
jQuery获取对象简单实现方法小结
Oct 30 Javascript
node.js中的events.emitter.listeners方法使用说明
Dec 10 Javascript
jQuery读取XML文件内容的方法
Mar 09 Javascript
jQuery中$this和$(this)的区别介绍(一看就懂)
Jul 06 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
bootstrap模态框远程示例代码分享
May 22 Javascript
JS在if中的强制类型转换方式
Jul 15 Javascript
vue如何截取字符串
May 06 Javascript
小程序实现上传视频功能
Aug 18 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多线程编程之管道通信实例分析
2015/03/07 PHP
php简单统计字符串单词数量的方法
2015/06/19 PHP
PHP容器类的两种实现方式示例
2019/07/24 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
PHP正则之正向预查与反向预查讲解与实例
2020/04/06 PHP
javascript实现实时输出当前的时间
2015/04/27 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
JavaScript中的闭包
2016/02/24 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
微信小程序学习之数据处理详解
2017/07/05 Javascript
vue上传图片组件编写代码
2017/07/26 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
js实现自定义右键菜单
2020/05/18 Javascript
Vue中nprogress页面加载进度条的方法实现
2020/11/13 Javascript
详解React中共享组件逻辑的三种方式
2021/02/02 Javascript
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
python实现简单的学生管理系统
2021/02/22 Python
css3的transition效果和transfor效果示例介绍
2013/10/30 HTML / CSS
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
Linux不知道文件后缀名怎么判断文件类型
2012/04/26 面试题
运动会解说词100字
2014/01/31 职场文书
生产厂长岗位职责
2014/02/21 职场文书
护理专业毕业生自荐书
2014/05/24 职场文书
自愿解除劳动合同协议书
2014/09/11 职场文书
教师个人教学总结
2015/02/11 职场文书
保护校园环境倡议书
2015/04/28 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
创业计划书之川味火锅店
2019/09/02 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
golang实现浏览器导出excel文件功能
2022/03/25 Golang
Python实现日志实时监测的示例详解
2022/04/06 Python