jQuery ajax全局函数处理session过期后的ajax跳转问题


Posted in Javascript onJune 03, 2016

做web常常需要考虑session过期的问题,session过期就让页面跳转到登录界面去,但是存在这样一个问题,当页面过期后,用户请求后台的方式有两种:传统方式和异步请求方式,传统方式倒好解决,请求到后台,拦截到过期的操作,直接跳转,但是异步请求不会刷新整个页面,因此对session过期的处理也不能按往常的方式,需要另外的操作。

具体思路:拦截器中判断是否为ajax请求 —— 是ajax请求则返回一个消息 ——页面添加一个全局的ajax处理事件,对消息进行判断,如果是报告session过期,则location到登录页面

第一步,拦截器判断是否为ajax请求:

if(request.getHeader("x-requested-with")!=null 
&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){ 
//是ajax请求,则返回个消息给前台
PrintWriter printWriter = response.getWriter(); 
printWriter.print("{sessionState:timeout}"); 
printWriter.flush(); 
printWriter.close(); 
}else{ 
//不是ajax请求,则直接跳转页面
}

第二步,设置全局ajax处理事件,处理session过期的问题,类似于一个拦截器或者过滤器:

$.ajaxSetup({ 
contentType:"application/x-www-form-urlencoded;charset=utf-8", 
cache:false , 
complete:function(data,TS){ 
//对返回的数据data做判断,
//session过期的话,就location到一个页面
} 
} 
});

这是一个基于jQuery的异步处理机制,完整代码我没写,上次在公司写的代码,带不出来,文章里的代码有些还是在网上找来粘进去的,凌晨都过了半小时了,太困了,记录下思路而已。

PS:ajax 操作全局监测,用户session失效

jQuery(function ($) {
// 备份jquery的ajax方法 
var _ajax = $.ajax;
// 重写ajax方法,先判断登录在执行success函数 
$.ajax = function (opt) {
var _success = opt && opt.success || function (a, b) { };
var _opt = $.extend(opt, {
success: function (data, textStatus) {
try {
if (data.sessionstatus == false) {
//用户失效进行操作
//return;
} 
} catch (e) {
}
_success(data, textStatus);
}
});
_ajax(_opt);
};
});
Javascript 相关文章推荐
javascript 计算两个整数的百分比值
Dec 26 Javascript
可以将word转成html的js代码
Apr 11 Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 Javascript
js的[defer]和[async]属性
Nov 24 Javascript
javascript中if和switch,==和===详解
Jul 30 Javascript
Javascript基础教程之比较null和undefined值
May 16 Javascript
JavaScript中ES6字符串扩展方法
Aug 26 Javascript
DOM 事件的深入浅出(一)
Dec 05 Javascript
详解node HTTP请求客户端 - Request
May 05 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 jQuery
详解使用WebPack搭建React开发环境
Aug 06 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 #Javascript
JS判断字符串变量是否含有某个字串的实现方法
Jun 03 #Javascript
JavaScript闭包实例详解
Jun 03 #Javascript
js判断某个字符出现的次数的简单实例
Jun 03 #Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 #Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
Jun 03 #Javascript
javascript闭包概念简单解析(推荐)
Jun 03 #Javascript
You might like
兼容性比较好的PHP生成缩略图的代码
2011/01/12 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php进程间通讯实例分析
2016/07/11 PHP
js 事件小结 表格区别
2007/08/13 Javascript
javascript 日期常用的方法
2009/11/11 Javascript
Javascript学习笔记6 prototype的提出
2010/01/11 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
js实现横向伸展开的二级导航菜单代码
2015/08/28 Javascript
原生js页面滚动延迟加载图片
2015/12/20 Javascript
基于jquery实现百度新闻导航菜单滑动动画
2016/03/15 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
微信小程序文章列表功能完整实例
2020/06/03 Javascript
[46:42]DOTA2-DPC中国联赛正赛 Aster vs Magma BO3 第二场 3月5日
2021/03/11 DOTA
Python RuntimeError: thread.__init__() not called解决方法
2015/04/28 Python
Python素数检测实例分析
2015/06/15 Python
Python实现模拟时钟代码推荐
2015/11/08 Python
Python中字典和集合学习小结
2017/07/07 Python
在python plt图表中文字大小调节的方法
2019/07/08 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
美国最受欢迎的度假租赁网站:VRBO
2016/08/02 全球购物
PHP面试题-$message和$$message的区别
2015/12/08 面试题
个人培训自我鉴定
2014/03/28 职场文书
社区助残日活动总结
2014/08/29 职场文书
教师节学生演讲稿
2014/09/03 职场文书
安全教育培训心得体会
2016/01/15 职场文书
2016年习主席讲话学习心得体会
2016/01/20 职场文书
高考升学宴主持词
2019/06/21 职场文书
如何判断微信付款码和支付宝付款码
2021/04/01 PHP
MySQL表字段时间设置默认值
2021/05/13 MySQL
分享一个vue实现的记事本功能案例
2022/04/11 Vue.js