快速学习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 判断客户端浏览器类型代码
Mar 01 Javascript
善用事件代理,警惕闭包的性能陷阱。
Jan 20 Javascript
javascript是怎么继承的介绍
Jan 05 Javascript
浏览器解析js生成的html出现样式问题的解决方法
Apr 16 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
May 28 Javascript
动态加载js、css的实例代码
May 26 Javascript
JS版微信6.0分享接口用法分析
Oct 13 Javascript
微信小程序 支付后台java实现实例
May 09 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
Vue中的无限加载vue-infinite-loading的方法
Apr 08 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
Jun 08 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 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
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
你必须知道的JavaScript 中字符串连接的性能的一些问题
2013/05/07 Javascript
Jquery遍历节点的方法小集
2014/01/22 Javascript
JavaScript italics方法入门实例(把字符串显示为斜体)
2014/10/17 Javascript
JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
2015/05/16 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
jQuery的文档处理程序详解
2016/05/10 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
vue父子组件的数据传递示例
2017/03/07 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[54:53]完美世界DOTA2联赛PWL S2 GXR vs PXG 第二场 11.18
2020/11/18 DOTA
从零学Python之入门(二)基本数据类型
2014/05/25 Python
python递归函数绘制分形树的方法
2018/06/22 Python
python 字典中取值的两种方法小结
2018/08/02 Python
HTML的form表单和django的form表单
2019/07/25 Python
python 3.74 运行import numpy as np 报错lib\site-packages\numpy\__init__.py
2019/10/06 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Python图像处理之膨胀与腐蚀的操作
2021/02/07 Python
Crocs美国官方网站:卡骆驰洞洞鞋
2017/08/04 全球购物
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
最新大学职业规划书范文
2013/12/30 职场文书
十佳班主任事迹材料
2014/01/18 职场文书
校园安全标语
2014/06/07 职场文书
汽车销售经理岗位职责
2014/06/09 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
离婚协议书格式
2014/11/21 职场文书
2015年个人剖析材料范文
2014/12/29 职场文书
高中教师个人工作总结
2015/02/10 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
Python简易开发之制作计算器
2022/04/28 Python