快速学习AngularJs HTTP响应拦截器


Posted in Javascript onDecember 31, 2015

任何时候,如果我们想要为请求添加全局功能,例如身份认证、错误处理等,在请求发送给服务器之前或服务器返回时对其进行拦截,是比较好的实现手段。

angularJs通过拦截器提供了一个从全局层面进行处理的途径。

四种拦截器

实现 request 方法拦截请求

request: function(config) {
// do something on request success
return config || $q.when(config);
}

该方法会在 $http 发送请求后台之前执行,因此你可以修改配置或做其他的操作。该方法接收请求配置对象(request configuration object)作为参数,然后必须返回配置对象或者 promise 。如果返回无效的配置对象或者 promise 则会被拒绝,导致 $http 调用失败。

实现 requestError 方法拦截请求异常

requestError: function(rejection) {
// do something on request error
return $q.reject(rejection);
}

有时候一个请求发送失败或者被拦截器拒绝了,请求异常拦截器会俘获那些被上一个请求拦截器中断的请求。它可以用来恢复请求或者有时可以用来撤销请求之前所做的配置,比如说关闭进度条,激活按钮和输入框什么之类的。

实现 response 方法拦截响应

response: function(response) {
// do something on response success
return response || $q.when(response);}

该方法会在 $http 接收到从后台过来的响应之后执行,因此你可以修改响应或做其他操作。该方法接收响应对象(response object)作为参数,然后必须返回响应对象或者 promise。响应对象包括了请求配置(request configuration),头(headers),状态(status)和从后台过来的数据(data)。如果返回无效的响应对象或者 promise 会被拒绝,导致$http 调用失败。

实现 responseError 方法拦截响应异常

responseError: function(rejection) {
// do something on response errorreturn $q.reject(rejection);
}

有时候我们后台调用失败了,也有可能它被一个请求拦截器拒绝了或者被上一个响应拦截器中断了。在这种情况下,响应异常拦截器可以帮助我们恢复后台调用。

拦截器核心

拦截服务工厂

var app = angular.module("ajaxHttp", []);
app.factory("httpInterceptor", [ "$q", "$rootScope", function($q, $rootScope) {
return {
request: function(config) {
// do something on request success
return config || $q.when(config);
},
 requestError: function(rejection) {


 // do something on request error


 return $q.reject(rejection)

 },
response: function(response) {
// do something on response success
return response || $q.when(response);
},
responseError : function(rejection) {
// do something on response error
return $q.reject(rejection);
}
};
}]);

注册拦截工厂方法

app.config(["$httpProvider", function($httpProvider) {
$httpProvider.interceptors.push("httpInterceptor");
}]);

示例

对401,404的拦截处理

app.config(["$httpProvider", function($httpProvider) { 
$httpProvider.interceptors.push('httpInterceptor'); 
}]); 
app.factory("httpInterceptor", ["$q", "$injector", function($q, $injector) {
return {
"responseError": function(response) {
if (response.status == 401) {
var rootScope = $injector.get('$rootScope');
var state = $injector.get('$rootScope').$state.current.name;
rootScope.stateBeforLogin = state;
rootScope.$state.go("login");
return $q.reject(response);
}
else if (response.status === 404) {
console.log("404!");
return $q.reject(response);
}
}
};
]);

以上内容给大家分享快速学习AngularJs HTTP响应拦截器 的相关知识,希望大家喜欢,同时感谢大家一直以来对三水点靠木网站的支持。

Javascript 相关文章推荐
JavaScript快速检测浏览器对CSS3特性的支持情况
Sep 26 Javascript
ajax java 实现自动完成功能
Dec 19 Javascript
JSF中confirm弹出框的用法示例介绍
Jan 07 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
jquery利用拖拽方式在图片上添加热链接
Nov 24 Javascript
js实现的万能flv网页播放器代码
Apr 30 Javascript
详解vue.js移动端导航navigationbar的封装
Jul 05 Javascript
Grunt针对静态文件的压缩,版本控制打包的实例讲解
Sep 29 Javascript
JS实现带导航城市列表以及输入搜索功能
Jan 04 Javascript
javascript设计模式 ? 模板方法模式原理与用法实例分析
Apr 23 Javascript
常见的javascript跨域通信方法
Dec 31 #Javascript
javascript实现input file上传图片预览效果
Dec 31 #Javascript
分享几种比较简单实用的JavaScript tabel切换
Dec 31 #Javascript
jQuery+ajax实现文章点赞功能的方法
Dec 31 #Javascript
jQuery实现的超简单点赞效果实例分析
Dec 31 #Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
Dec 31 #Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 #Javascript
You might like
神族 Protoss 历史背景
2020/03/14 星际争霸
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
微信公众平台开发教程②微信端分享功能图文详解
2019/04/10 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
<script defer> defer 是什么意思
2009/05/10 Javascript
javascript 面向对象编程  function是方法(函数)
2009/09/17 Javascript
JQuery调用WebServices的方法和4个实例
2014/05/06 Javascript
JavaScript常用脚本汇总(二)
2015/03/04 Javascript
Jquery实现仿京东商城省市联动菜单
2015/11/19 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
深入解析koa之异步回调处理
2019/06/17 Javascript
js实现带箭头的进度流程
2020/03/26 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python利用ansible分发处理任务
2015/08/04 Python
python爬虫URL重试机制的实现方法(python2.7以及python3.5)
2018/12/18 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
2019/04/26 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
2020/03/02 Python
使用Python pip怎么升级pip
2020/08/11 Python
中国最大的名表商城:万表网
2016/08/29 全球购物
美国Lolё官网:购买大胆而美丽的女性运动服装
2017/05/22 全球购物
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
台湾最大银发乐活百货:乐龄网
2018/05/21 全球购物
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis