快速学习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基础之查找元素的详细介绍(访问节点)
Jul 05 Javascript
改变状态栏文字的js代码
Jun 13 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
angular内置provider之$compileProvider详解
Sep 27 Javascript
Puppeteer环境搭建的详细步骤
Sep 21 Javascript
iview在vue-cli3如何按需加载的方法
Oct 31 Javascript
详解javascript中的Error对象
Apr 25 Javascript
解决layer.prompt无效的问题
Sep 24 Javascript
小程序采集录音并上传到后台
Nov 22 Javascript
jquery绑定事件 bind和on的用法与区别分析
May 22 jQuery
JS事件循环机制event loop宏任务微任务原理解析
Aug 04 Javascript
vue中如何自定义右键菜单详解
Dec 08 Vue.js
常见的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 array_map()数组函数使用说明
2011/07/12 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
2015/05/11 PHP
javascript中对对层的控制
2006/12/29 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
关于js内存泄露的一个好例子
2013/12/09 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JavaScript之面向对象_动力节点Java学院整理
2017/06/29 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
Vue中引入svg图标的两种方式
2021/01/14 Vue.js
图文详解WinPE下安装Python
2016/05/17 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python logging日志模块原理及操作解析
2019/10/12 Python
django实现将后台model对象转换成json对象并传递给前端jquery
2020/03/16 Python
Python 将 QQ 好友头像生成祝福语的实现代码
2020/05/03 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
荷兰度假屋租赁网站:Aan Zee
2020/02/28 全球购物
J2EE模式面试题
2016/10/11 面试题
集团薪酬管理制度
2014/01/13 职场文书
中秋节主持词
2014/04/02 职场文书
中职生自荐信范文
2014/06/15 职场文书
消防宣传口号
2014/06/16 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
教师教育教学随笔
2015/08/15 职场文书
python数字转对应中文的方法总结
2021/08/02 Python
Zabbix对Kafka topic积压数据监控的问题(bug优化)
2022/07/07 Servers