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

来源:互联网 发布:人工智能的利弊英语版 编辑:程序博客网 时间:2024/05/29 14:44

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




原创粉丝点击