jquery的ajax的dataFilter参数的使用

       dataFilter给Ajax返回的原始数据的进行预处理的函数。它的调用在success之前。提供data和type两个参数:data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。函数返回的值将由jQuery进一步处理。

function (data, type) {
    // 对Ajax返回的原始数据进行预处理
    return data  // 返回处理后的数据,处理后的数据将被其它函数使用(如success)
}

       当用户的session失效时可使用ajax请求时,可以使用这个函数进行判断是否要重新跳转到登录界面(系统的过滤器发现用户ajax的请求,但用户没有登录或session失效时返回字符串”timeOut"):

 $.ajaxSetup({
         dataFilter : function(data, type){
             console.log("data:"+data);
            if(data == "timeOut" || data == "[object XMLDocument]"){//ajax请求,发现session过期,重新刷新页面,跳转到登录页面
                window.location.reload();
            }else{
                return data;
            }
        }
    })

过滤器:
public class AuthFilter implements Filter{
    private String excludeUrl;           
    private List<String> excludeUrlList; 
   
    public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        Object object = req.getSession().getAttribute(Constant.SESSION_USER);
        String uri = req.getServletPath().trim();
        boolean contain = false;
        if(null == object){
            for(String str : excludeUrlList){
                str = str.trim();
                if(str.equals(uri)){
                    contain = true;
                    break;
                }
            }
        }
       
        if(null == object && !contain){
            if(req.getHeader("x-requested-with")!= null && req.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){//ajax请求  
                PrintWriter printWriter = response.getWriter();  
                printWriter.print("timeOut");  
                printWriter.flush();  
                printWriter.close();  
            }else{
                ((HttpServletResponse)response).sendRedirect(req.getContextPath()+"/page/common/forwardLogin.jsp") ;
            }
        }else{
            chain.doFilter(request, response);
        }
    }
   
    public void init(FilterConfig config) throws ServletException {
        this.excludeUrl = config.getInitParameter("excludeUrl");
        this.excludeUrlList = Arrays.asList(excludeUrl.split(","));
    }

    public void destroy() {
    }
   
    public String getExcludeUrl() {
        return excludeUrl;
    }

    public void setExcludeUrl(String excludeUrl) {
        this.excludeUrl = excludeUrl;
    }
}

相关推荐