解决ajax请求默认不支持重定向问题
1,Ajax默认是不支持重定向的,只局部刷新数据,不跳转页面。
2,后台代码处理:
@RequestMapping("/updateCurrentUser") public String updateCurrentUser(HttpServletRequest request, HttpServletResponse response, String type){ JsonObject json = new JsonObject(); String url = ""; if(type.equals("ADMIN_USER")){ Object s_user1 = request.getSession().getAttribute(Global.SESSION_ADMIN); request.getSession().setAttribute("currentUser",s_user1); request.getSession().setAttribute(Global.USER_ROLE,"ADMIN_USER"); url = "/jsp/console/backstageHome.jsp"; } if(type.equals("MEDIATORS")){ Object s_user2 = request.getSession().getAttribute(Global.SESSION_MEDIATOR); request.getSession().setAttribute("currentUser",s_user2); request.getSession().setAttribute(Global.USER_ROLE,"MEDIATORS"); url = "/case/listMe"; } String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+request.getContextPath(); //如果request.getHeader("X-Requested-With") 返回的是"XMLHttpRequest"说明就是ajax请求,需要特殊处理 if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ //告诉ajax我是重定向 response.setHeader("REDIRECT", "REDIRECT"); //告诉ajax我重定向的路径 response.setHeader("CONTENTPATH", basePath+url); response.setStatus(HttpServletResponse.SC_FORBIDDEN); } return null; }
3.前端代码处理:
var jqxhr; //设置ajax请求完成后运行的函数, $.ajaxSetup({ complete:function(){ if("REDIRECT" == jqxhr.getResponseHeader("REDIRECT")){ //若HEADER中含有REDIRECT说明后端想重定向, var win = window; while(win != win.top){ win = win.top; } win.location.href = jqxhr.getResponseHeader("CONTENTPATH");//将后端重定向的地址取出来,使用win.location.href去实现重定向的要求 } } }); function updateCurrentUser(type){ //debugger; jqxhr = $.ajax({ type: "GET", async: true, url: "../../center/updateCurrentUser?type="+type, dataType: "json", success: function(data){ }, error:function(err){ } }); }