快速学习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 相关文章推荐
犀利的js 函数集合
Jun 11 Javascript
编程语言JavaScript简介
Oct 16 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 Javascript
解决node.js安装包失败的几种方法
Sep 02 Javascript
Node.js的特点详解
Feb 03 Javascript
微信小程序 共用变量值的实现
Jul 12 Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
Apr 22 Javascript
微信小程序模板消息限制实现无限制主动推送的示例代码
Aug 27 Javascript
新手入门js闭包学习过程解析
Oct 08 Javascript
vue+iview框架实现左侧动态菜单功能的示例代码
Jul 23 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 空格,换行,跳格使用说明
2009/12/18 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
PHP join()函数用法与实例讲解
2019/03/11 PHP
细说javascript函数从函数的构成开始
2013/08/29 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
jQuery EasyUI框架中的Datagrid数据表格组件结构详解
2016/06/09 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
2017/06/16 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
2018/12/10 jQuery
深入了解query和params的使用区别
2019/06/24 Javascript
Javascript 对象(object)合并操作实例分析
2019/07/30 Javascript
在elementui中Notification组件添加点击事件实例
2020/11/11 Javascript
python异常和文件处理机制详解
2016/07/19 Python
Python变量和数据类型详解
2017/02/15 Python
Python查找文件中包含中文的行方法
2018/12/19 Python
python连接mysql有哪些方法
2020/06/24 Python
从python读取sql的实例方法
2020/07/21 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
香港交友网站:be2香港
2018/07/22 全球购物
UNIX文件类型
2013/08/29 面试题
营业员演讲稿
2013/12/30 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
《长相思》听课反思
2014/04/10 职场文书
个人校本研修方案
2014/05/26 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
邀请函怎么写
2015/01/30 职场文书
法定授权委托证明书
2015/06/18 职场文书
结婚十年感言
2015/07/31 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python