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 相关文章推荐
javascript 播放器 控制
Jan 22 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
Jul 19 Javascript
轻轻松松学JS调试(不下载任何工具)
Apr 14 Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 Javascript
jQuery实现高亮显示的方法
Mar 10 Javascript
常用javascript表单验证汇总
Jul 20 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
基于jQuery实现滚动切换效果
Dec 02 Javascript
webpack热模块替换(HMR)/热更新的方法
Apr 05 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
JavaScript算法学习之冒泡排序和选择排序
Nov 02 Javascript
JS数组方法concat()用法实例分析
Jan 18 Javascript
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
ThinkPHP的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
php简单实现文件或图片强制下载的方法
2016/12/06 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
jquery 学习笔记一
2010/04/07 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
js调试工具Console命令详解
2014/10/21 Javascript
jQuery遍历json中多个map的方法
2015/02/12 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
使用smartupload组件实现jsp+jdbc上传下载文件实例解析
2017/01/05 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
javascript网页随机点名实现过程解析
2019/10/15 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
[02:34]2016完美“圣”典风云人物:BurNIng专访
2016/12/10 DOTA
python中尾递归用法实例详解
2015/04/28 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Python 线程池用法简单示例
2019/10/02 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
kafka-python 获取topic lag值方式
2019/12/23 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
Perfume’s Club中文官网:西班牙美妆在线零售品牌
2020/08/24 全球购物
别名指示符是什么
2012/10/08 面试题
新闻记者实习自我鉴定
2013/09/19 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
比较node.js和Deno
2021/04/27 Javascript