AngularJS通过$http和服务器通信详解


Posted in Javascript onSeptember 21, 2016

$http

AngularJS提供了$http服务来同服务端进行通信,$http服务队浏览器的XMLHttpRequest对象进行了封装,让我们可以以ajax的方式来从服务器请求数据。

在AngularJS中与远程HTTP服务器交互时会用一个非常关键的服务-$http。

      1、$http是angular中的一个核心服务,利用浏览器的xmlhttprequest或者via JSONP对象与远程HTTP服务器进行交互。

      2、$http的使用方式和jquery提供的$.ajax操作比较相同,均支持多种method的请求,get、post、put、delete等。

      3、$http的各种方式的请求更趋近于rest风格。

      4、在controller中可通过与$scope同样的方式获取$http对象,e.g. function controller($scope,$http){}

下面进行$http服务的使用说明,调用如下:

$http(config).success(function(data,status,headers,config){}).error(function(data,status,headers,config){});

$http服务是一个接受一个参数的函数,参数的类型是对象,用来配置生成的http的请求,该函数返回一个promise对象

var promise = $http({
 method:'GET',
 url:'/api/user.json'
});

promise.then(function(resp){}, function(resp){})

$http请求的配置对象

$http()接受的配置对象可以包含以下属性:

     method:http请求方式,可以为GET,DELETE,HEAD,JSONP,POST,PUT

     url:字符串,请求的目标

     params:字符串或者对象,会被转换成为查询字符串追加的url后面

     data:在发送post请求时使用,作为消息体发送到服务器

     headers:一个列表,每个元素都是一个函数,返回http头

     xsrfHeaderName(字符串):保存XSFR令牌的http头的名称

     xsrfCookieName:保存XSFR令牌的cookie名称

     transformRequest:函数或者函数数组,用来对http请求的请求体和头信息进行转换,并返回转换后的结果。

     transformResponse:函数或者函数数组,用来对http响应的响应体和头信息进行转换,并返回转换后的结果。

     cache:布尔类型或者缓存对象,设置之后angular会缓存get请求。

     timeout:数值,延迟请求

     responseType:字符串,响应类型。可以为arraybuffer, blob,document,json, text, moz-blob, moz-chunked-text, moz-chunked-

     arraybuffer

$http请求的响应对象

     angular传递给then方法的响应对象包括以下几个属性

     data:转换之后的响应体

     status:http响应状态码

     headers:头信息

     config:生成原始请求的设置对象

     statusText:http响应状态的文本

拦截器

angular中通过拦截器我们可以从全局层面对请求以及响应进行拦截。

使用拦截器之前,我们通过factory()声明一个服务,然后通过$httpProvider注册拦截器。拦截器分为四种,两种成功拦截器,两种失败拦截器。

angular.module('test', []).factory('testInterceptor', function($q){
 var interceptor = {
 'request':function(config){
 return config;
 },
 'response':function(resp){
 return response;
 },
 'requestError':function(rejection){
 return $q.reject(rejection);
 },
 'responseError':function(rejection){
 return rejection
 }
 }
 return interceptor;
})

angular.module('test', []).config(function($httpProvider){
 $httpProvider.interceptors.push('testInterceptor');
})

总结

以上就是这篇文章的全部内容,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
JS面向对象编程之对象使用分析
Aug 19 Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 Javascript
javascript里模拟sleep(两种实现方式)
Jan 25 Javascript
JQuery的ready函数与JS的onload的区别详解
Nov 21 Javascript
JS二维数组的定义说明
Mar 03 Javascript
jQuery中ajax的load()方法用法实例
Dec 26 Javascript
js实现简易的单数字随机抽奖(0-9)
Mar 19 Javascript
JavaScript中Date对象的常用方法示例
Oct 24 Javascript
layer弹出层中H5播放器全屏出错的解决方法
Feb 21 Javascript
基于javaScript的this指向总结
Jul 22 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
JavaScript 拖拽实例代码
Sep 21 #Javascript
Angularjs中controller的三种写法分享
Sep 21 #Javascript
jQuery中Find选择器用法示例
Sep 21 #Javascript
jQuery实现点击后高亮背景固定显示的菜单效果【附demo源码下载】
Sep 21 #Javascript
Angular2 (RC5) 路由与导航详解
Sep 21 #Javascript
Angular2 (RC4) 路由与导航详解
Sep 21 #Javascript
AngularJS 单元测试(二)详解
Sep 21 #Javascript
You might like
PHP初学入门
2006/11/19 PHP
PHP伪造referer实例代码
2008/09/20 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
PHP新建类问题分析及解决思路
2015/11/19 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
javascript preload&lazy load
2010/05/13 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
js图片模糊切换显示特效的方法
2015/02/17 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
React实现点击删除列表中对应项
2017/01/10 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
js调用设备摄像头的方法
2018/07/19 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Python数组定义方法
2016/04/13 Python
浅谈Python 字符串格式化输出(format/printf)
2016/07/21 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
学期研究性学习个人的自我评价
2014/01/09 职场文书
学生打架检讨书大全
2014/01/23 职场文书
表演方阵解说词
2014/02/08 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
校车安全责任书
2014/08/25 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android