您的位置:首页 > 其它

封装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;

}
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('系统提示', "操作失败,请稍后再试!");
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息