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与Div对层定位和移动获得坐标的实现代码
Sep 08 Javascript
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
Jquery图形报表插件 jqplot简介及参数详解
Oct 10 Javascript
JQuery异步获取返回值中文乱码的解决方法
Jan 29 Javascript
Javascript vue.js表格分页,ajax异步加载数据
Oct 24 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
详解使用vue脚手架工具搭建vue-webpack项目
May 10 Javascript
基于 Vue 的树形选择组件的示例代码
Aug 18 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
Aug 08 jQuery
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
Apr 28 Javascript
vue中axios实现数据交互与跨域问题
May 12 Javascript
小程序自定义导航栏兼容适配所有机型(附完整案例)
Apr 26 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
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
CMS中PHP判断系统是否已经安装的方法示例
2014/07/26 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
解决php写入数据库乱码的问题
2019/09/17 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
js Array对象的扩展函数代码
2013/04/24 Javascript
javascript中直接写php代码的方法
2013/07/31 Javascript
js实现的类似于asp数据字典的数据类型代码实例
2014/09/03 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
JavaScript实现点击按钮切换网页背景色的方法
2015/10/17 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
python中正则的使用指南
2016/12/04 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
Python中@property的理解和使用示例
2019/06/11 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
用css3制作纸张效果(外翻卷角)
2013/02/01 HTML / CSS
Radley英国官网:英国莱德利小狗包
2019/03/21 全球购物
Zavvi西班牙:电子游戏、极客服装、Blu-ray、Funko Pop等
2019/05/03 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
金融专业大学生职业生涯规划范文
2014/01/16 职场文书
面包店的创业计划书范文
2014/01/16 职场文书
工程造价专业大学生职业生涯规划书
2014/01/18 职场文书
社区庆八一活动方案
2014/02/02 职场文书
诚信贷款承诺书
2014/05/30 职场文书
2015年财政局工作总结
2015/05/21 职场文书
高一化学教学反思
2016/02/22 职场文书
PostGIS的安装与入门使用指南
2022/01/18 PostgreSQL