快速学习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基础知识大集锦(二) 推荐收藏
Jan 13 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
javascript中动态加载js文件多种解决办法总结
Nov 15 Javascript
JS中怎样判断undefined(比较不错的方法)
Mar 27 Javascript
用javascript对一个json数组深度赋值示例
Jul 27 Javascript
JavaScript事件类型中UI事件详解
Jan 14 Javascript
Javascript函数中的arguments.callee用法实例分析
Sep 16 Javascript
jquery插件treegrid树状表格的使用方法详解(.Net平台)
Jan 03 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
Node.JS更改Windows注册表Regedit的方法小结
Aug 18 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
常见的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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php实现加减法验证码代码
2014/02/14 PHP
php外部执行命令函数用法小结
2016/10/11 PHP
php实现文件预览功能
2017/05/23 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法
2019/04/02 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
在多个页面使用同一个HTML片段的代码
2011/03/04 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
详解Angular.js数据绑定时自动转义html标签及内容
2017/03/30 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
详解微信小程序 相对定位和绝对定位
2017/05/11 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
详解npm 配置项registry修改为淘宝镜像
2018/09/07 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
简单了解Vue computed属性及watch区别
2020/07/10 Javascript
JavaScript读取本地文件常用方法流程解析
2020/10/12 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
python实现统计代码行数的方法
2015/05/22 Python
python利用正则表达式搜索单词示例代码
2017/09/24 Python
教你使用python实现微信每天给女朋友说晚安
2018/03/23 Python
详解Python如何生成词云的方法
2018/06/01 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
python实现简单银行管理系统
2019/10/25 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
电钳工人个人求职信
2014/05/10 职场文书
就职演讲稿范文
2014/05/19 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书