封装ajax方法(统一处理登录超时异常)
2017-07-28 13:44
543 查看
在项目中使用普遍使用了ajax作为请求,如果当登录超时时,需要弹出登录窗口或者跑转到登录页面 重新验证,如果每个方法都判断一遍是个很头疼的事情,为此对ajax 进行了封装。使用方法跟原生ajax一样。
common.js
(function ($) {
//初始化绑定默认的属性
$.ajaxDefaults = $.ajaxDefaults || {};
$.ajaxDefaults.property = {
async:true,
type:"POST",
contentType:"application/x-www-form-urlencoded",
cache:false,
data:{},
dataType:"json",
timeout:6000,
success:function (result, textStatus, request){
},
error:function(result, textStatus, request){
console.log(result);
}
};
//初始化上传控件
$.ajaxRequest = function (b) {
var p = $.extend({}, $.ajaxDefaults.property, b || {});
if(typeof(p.url) == "undefined" || p.url == ""){
$.messager.alert('系统提示', "缺少URL参数");
return ;
}
$.ajax({
async:p.async,
type: p.type,
contentType: p.contentType,
url: p.url,
dataType: p.dataType,
data: p.data,
success: function (result, textStatus, request){
if(request.getResponseHeader('ResponseStatus') == "timeout"){//登录超时
if(window != top){
parent.openLoginDlg();
}else{
openLoginDlg();
}
return ;
}
p.success(result, textStatus, request);
},error:function(data){
p.error(data);
}
});
};
})(jQuery);
后端登录拦载器处理:
public class AuthFilter extends AuthorizationFilter {
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
Subject subject = getSubject(request, response);
if (subject.getPrincipal() == null) {
if (isAjax(httpRequest)) {
httpResponse.setHeader("ResponseStatus", "timeout");
// WebUtils.sendJson(httpResponse, JsonUtils.toJSONString(new ViewResult(false,
// "您尚未登录或登录时间过长,请重新登录!")));
} else {
saveRequestAndRedirectToLogin(request, response);
return false;
}
}
return true;
}
使用示例:
$.ajaxRequest({
url: postURL,
data: $("#UserForm").serializeArray(),
success: function (result) {
if (result.code == 0) {
$.messager.alert('系统提示', '保存成功', 'info', function () {
window.location.href ="${basePath}/user/userList.html";
});
}else{
$.messager.alert(result.msg);
$("#submitBtn").attr("onclick","saveUser()");
}
},error:function(data){
$("#submitBtn").attr("onclick","saveUser()");
$.messager.alert('系统提示', "操作失败,请稍后再试!");
}
});
common.js
(function ($) {
//初始化绑定默认的属性
$.ajaxDefaults = $.ajaxDefaults || {};
$.ajaxDefaults.property = {
async:true,
type:"POST",
contentType:"application/x-www-form-urlencoded",
cache:false,
data:{},
dataType:"json",
timeout:6000,
success:function (result, textStatus, request){
},
error:function(result, textStatus, request){
console.log(result);
}
};
//初始化上传控件
$.ajaxRequest = function (b) {
var p = $.extend({}, $.ajaxDefaults.property, b || {});
if(typeof(p.url) == "undefined" || p.url == ""){
$.messager.alert('系统提示', "缺少URL参数");
return ;
}
$.ajax({
async:p.async,
type: p.type,
contentType: p.contentType,
url: p.url,
dataType: p.dataType,
data: p.data,
success: function (result, textStatus, request){
if(request.getResponseHeader('ResponseStatus') == "timeout"){//登录超时
if(window != top){
parent.openLoginDlg();
}else{
openLoginDlg();
}
return ;
}
p.success(result, textStatus, request);
},error:function(data){
p.error(data);
}
});
};
})(jQuery);
后端登录拦载器处理:
public class AuthFilter extends AuthorizationFilter {
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws IOException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
Subject subject = getSubject(request, response);
if (subject.getPrincipal() == null) {
if (isAjax(httpRequest)) {
httpResponse.setHeader("ResponseStatus", "timeout");
// WebUtils.sendJson(httpResponse, JsonUtils.toJSONString(new ViewResult(false,
// "您尚未登录或登录时间过长,请重新登录!")));
} else {
saveRequestAndRedirectToLogin(request, response);
return false;
}
}
return true;
}
private boolean isAjax(HttpServletRequest httpRequest){ String xmlHttpRequest = httpRequest.getHeader("X-Requested-With"); if (xmlHttpRequest != null && xmlHttpRequest.equalsIgnoreCase("XMLHttpRequest")) { return true; } return false; }
使用示例:
$.ajaxRequest({
url: postURL,
data: $("#UserForm").serializeArray(),
success: function (result) {
if (result.code == 0) {
$.messager.alert('系统提示', '保存成功', 'info', function () {
window.location.href ="${basePath}/user/userList.html";
});
}else{
$.messager.alert(result.msg);
$("#submitBtn").attr("onclick","saveUser()");
}
},error:function(data){
$("#submitBtn").attr("onclick","saveUser()");
$.messager.alert('系统提示', "操作失败,请稍后再试!");
}
});
相关文章推荐
- 扩展jQuery的方法统一处理AJAX调用过程中产生的异常错误信息
- 在Ajax请求中处理登录session超时的方法
- 想抛就抛:Application_Error中统一处理ajax请求执行中抛出的异常
- 使用Spring MVC统一异常处理的几个方法
- Spring Boot中使用AOP统一处理web层异常的方法
- js封装获取标签处理操作 ,ajax,ready()方法
- Shiro 处理ajax请求 拦截登录超时 解决!
- Struts2、Spring MVC4 框架下的ajax统一异常处理
- java 接口方法超时异常处理 设置超时时间
- jQuery基于$.ajax设置移动端click超时处理方法
- 在Web应用中,会用到大量的Ajax请求,在Ajax请求中存在的一个问题就是如何判断session超时,在网上找到的一个java中处理此问题方法:
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- ajax提交session超时跳转页面使用全局的方法来处理
- 统一的Ajax提交封装,一劳永逸好工具(带跨域处理)
- Spring MVC的异常统一处理方法
- vue axios请求拦截器,判断是否登录超时,或对请求结果做一个统一处理
- java Servlet Filter 拦截Ajax请求,统一处理session超时的问题
- Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)
- 关于mysql登录异常处理方法 - mysql ERROR 1045 (28000)
- Ext JS 4 - Ajax和Rest代理处理服务器端异常和消息的方法