Ajax请求Session超时的解决办法:拦截器 + 封装jquery的post方法
2024-10-02 00:05:57
目标:前端系统,后端系统等,统一处理Session超时和系统错误的问题。
可能需要处理的问题:Session超时、系统500错误、普通的业务错误、权限不足。
同步请求:
Session超时,登录拦截器,重定向到登录页面。
500等系统错误,SpringMVC自定义ExceptionHanlder,跳转到系统错误页面,给访客友好的提示。
业务错误和权限不足,与500类似。
相对而言,同步方式,处理起来还是比较容易的。
异步请求:
2种方式
1.后端登录拦截器,发现Session超时,给个标记。
后端系统错误捕捉,给个标记。
比如:
if (CommonUtil.isAjaxRequest(request)) {
response.setHeader(BERROR, "yes");
CommonUtil.jsonError(response);
return null;
}
前端
<script>
$(function() {
$.ajaxSetup({
contentType : "application/json;charset=utf-8",
complete : function(XMLHttpRequest, textStatus) {
// 通过XMLHttpRequest取得响应头,
var blogin = XMLHttpRequest.getResponseHeader("blogin");
if (blogin == "yes") {
alert("Session time out2");
window.location = "${frontLoginUrl}";
}
var berror = XMLHttpRequest.getResponseHeader("berror");
if (berror == "yes") {
alert("Session error2");
}
}
});
});
</script>
2. 封装jquery的post方法。
function post(url, params, fn) {
$.post(url, params, function(data) {
if(data.code==-1){
alert("Session time out");
return;
}
if(data.code==-5){
alert("System error.");
return;
}
if(data.code ==0){
alert("出了点小问题,"+data.msg);
return;
}
if(data.code == -2){
alert("权限不足,请联系网站管理员.");
return;
}
fn(data);
});
}
调用方式:
post(base + "/home/bankcard/doadd.json", {
"bank" : bank,
"card" : card
}, function(data) { }
参考资料:http://daichangfu.iteye.com/blog/1705097、某前端王的建议
补充几点
1.后端拦截器加标记。
好处是:前端用ajaxSetup,前端没有干扰到任何已有的代码。比如原来$.post不用修改。
坏处是:后端要改。
2.前端统一封装post,正好反过来。
前端需要修改已有的代码。
后端不需要修改。
最新文章
- jQuery插件(右击事件)
- word20161203
- 使用keepalived及典型应用
- FreeBSD 10 发布
- CentOS hadoop启动错误 JAVA_HOME is not set and could not be found
- Visual Studio Team Foundation Server 2015(TFS 秘钥、序列号)
- Android(java)学习笔记171:Service生命周期
- shijan
- SublimeText的使用
- casperjs配合phantomjs实现自动登录百度,模拟点击等等操作 - 怕虎在线www.ipahoo.com图文教程 - 怕虎在线
- USB CCID协议和PC/SC标准
- IP选路
- C# 双引号的输出
- vi编辑器 :x与:wq的区别
- golang 类型断言的学习
- 如何使用 window api 转换字符集?
- FFmpeg的HEVC解码器源代码简单分析:解码器主干部分
- JDK8 HashMap--treeify()树形化方法
- 二分搜索-poj1064
- ReentrantLock与synchronized
热门文章
- 如何使用maven 打包源代码呢?
- java文件处理 之 读写TXT(比之c++,重置文件头,int转string)
- php操作zip压缩文件
- 【习题 6-11 UVA - 10410】Tree Reconstruction
- 知无涯者(The Man Who Knew Infinity)
- js进阶 14-4 $.get()方法和$.post()方法如何使用
- amazeui学习笔记--css(常用组件8)--列表list
- JS数据类型的转换规则
- (转)iptables详细教程:基础、架构、清空规则、追加规则、应用实例
- Python 极简教程(三)数据类型