封装ajax方法(统一处理登录超时异常)

       在项目中使用普遍使用了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('系统提示', "操作失败,请稍后再试!");
	            }
	        });




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值