前提:使用ajax提交请求无法重定向----------(res.sendRedirect("../login.jsp");)被忽视;
原因:ajax是局部刷新,所以忽视了重定向语句
解决办法:(分为两步)
因业务逻辑不同、所以只展示部分关键代码
第一步、Fliter类处理
1.判断是ajax请求还是普通请求方式
2.如果是ajax请求,则使用ajax实用的方式跳转
代码如下:
//判断是否是AJAX请求,是则值为XMLHttpRequest
String type=req.getHeader("X-Requested-With")==null ? "" : req.getHeader("X-Requested-With");
//currLoginStatus登录状态为true,放行,否则拦截
if (currLoginStatus) {
chain.doFilter(req, res);
}else {
//未登录
if("XMLHttpRequest".equals(type)) {
//处理AJAX请求,设置响应头信息
res.setHeader("REDIRECT", "REDIRECT");
//需要跳转页面 url路径根据自己的界面存放路径写
res.setHeader("CONTEXTPATH","login.jsp");
}
else {
res.sendRedirect("../login.jsp");
}
}
第二步、ajax处理
3.ajax对后台响应过来的响应头进行处理
$.ajaxSetup({
//设置ajax请求结束后的执行动作
complete : function(XMLHttpRequest, textStatus) {
// 通过XMLHttpRequest取得响应头,REDIRECT
var redirect = XMLHttpRequest.getResponseHeader("REDIRECT"); //若HEADER中含有REDIRECT说明后端想重定向
if (redirect == "REDIRECT") {
var win = window;
while (win != win.top) {
win = win.top;
}
//把后台响应的重定向地址取出来,使用win.location.href去实现重定向
win.location.href =XMLHttpRequest.getResponseHeader("CONTEXTPATH");
}
}
});