快速学习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 Base类 包含基本的方法
Jul 22 Javascript
深入理解JavaScript 闭包究竟是什么
Apr 12 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
Aug 15 Javascript
利用Node.js编写跨平台的spawn语句详解
Feb 12 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
简单的网页广告特效实例
Aug 19 Javascript
vue2导航根据路由传值,而改变导航内容的实例
Nov 10 Javascript
浅谈webpack对样式的处理
Jan 05 Javascript
基于打包工具Webpack进行项目开发实例
May 29 Javascript
详解js获取video任意时间的画面截图
Apr 17 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 Javascript
在vue中实现禁止回退上一步,路由不存历史记录
Jul 22 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
用文本文件实现的动态实时发布新闻的程序
2006/10/09 PHP
利用 window_onload 实现select默认选择
2006/10/09 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP快速生成各种信息提示框的方法
2016/02/03 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
jQuery图片预加载 等比缩放实现代码
2011/10/04 Javascript
javascript动态加载二
2012/08/22 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
JS和jQuery使用submit方法无法提交表单的原因分析及解决办法
2016/05/17 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
使用python实现扫描端口示例
2014/03/29 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
简单分析python的类变量、实例变量
2019/08/23 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
pytorch中图像的数据格式实例
2020/02/11 Python
Python经纬度坐标转换为距离及角度的实现
2020/11/01 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
德国网上药房:Apotal
2017/04/04 全球购物
毕业生毕业总结的自我评价范文
2013/11/02 职场文书
高级工程师岗位职责
2013/12/15 职场文书
房产委托公证书
2014/04/08 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
2015入党自传书范文
2015/06/26 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书