快速学习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 相关文章推荐
提高网站信任度的技巧
Oct 17 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
Feb 03 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
jQuery 中国省市两级联动选择附图
May 14 Javascript
最短的IE判断var ie=!-[1,]分析
May 28 Javascript
类似于QQ的右滑删除效果的实现方法
Oct 16 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
Nov 07 Javascript
javascript算法之二叉搜索树的示例代码
Sep 12 Javascript
javascript少儿编程关于返回值的函数内容
May 27 Javascript
JS实现表单中点击小眼睛显示隐藏密码框中的密码
Apr 13 Javascript
Element实现动态表格的示例代码
Aug 02 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
Jun 25 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 CLI模式下的多进程应用分析
2013/06/03 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
php curl模拟post请求小实例
2013/11/13 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
2017/02/15 PHP
php5.x禁用eval的操作方法
2018/10/19 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
jQuery根据纬度经度查看地图处理程序
2013/05/08 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
JavaScript导出Excel实例详解
2014/11/25 Javascript
jQuery实现仿QQ头像闪烁效果的文字闪动提示代码
2015/11/03 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
VueJS事件处理器v-on的使用方法
2017/09/27 Javascript
Vue使用lodop实现打印小结
2019/07/06 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
[54:29]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第二场
2018/04/09 DOTA
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
Python日期时间Time模块实例详解
2019/04/15 Python
python科学计算之narray对象用法
2019/11/25 Python
将python文件打包exe独立运行程序方法详解
2020/02/12 Python
Python 实现打印单词的菱形字符图案
2020/04/12 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
什么造成了Java里面的异常
2016/04/24 面试题
自我评价的范文
2014/02/02 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
党支部书记四风问题整改措施
2014/09/24 职场文书
机关作风建设整改方案
2014/10/27 职场文书
餐饮服务食品安全承诺书
2015/04/29 职场文书
2015年国庆节新闻稿
2015/07/18 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
Windows server 2012 配置Telnet以及用法详解
2022/04/28 Servers