我在JS里面写了个Ajax,传值给控制器,然后利用request.getRequestDispatcher(),打算跳转至另外一个页面。但是没有跳转成功,运行之后没反应。
在网上搜了资料发现,利用ajax的请求时无法利用equest.getRequestDispatcher()跳转。所以可以考虑换一种方式进行跳转。
在Ajax请求下response.sendRedirect()同样无法进行跳转。原理如下:
Ajax的原理简单来说,实际上就是通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。
这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对 XMLHttpRequest有所了解。
我们可以看出,XMLHttpRequest对象完全用来向服务器发出一个请求的,它的作用也局限于此,但它的作用是整个ajax实现的关键,我们可以把服务器端看成一个数据接口,它返回的是一个纯文本流,当然,这个文本流可以是XML格式,可以是Html,可以是Javascript代码,也可以只是一个字符串。这时候,XMLHttpRequest向服务器端请求这个页面,服务器端将文本的结果写入页面,这和普通的web开发流程是一样的,不同的是,客户端在异步获取这个结果后,不是直接显示在页面,而是先由javascript来处理,然后再显示在页面。
最后采用下面的方式实现
@RequestMapping(value = "/login", method = RequestMethod.POST) public void Login(HttpServletRequest request, HttpServletResponse response, LcbUser user) throws Exception { try { LcbUser currentUser = userService.checkLogin(user.getLoginName(), user.getPassWord()); boolean flag=false; if (user.getLoginName() != null && user.getPassWord() != null) { //创建session对象 HttpSession session = request.getSession(); //把用户数据保存在session域对象中 if(currentUser==null){ flag=false; } else { session.setAttribute("currentUser", currentUser.getUserName()); session.setAttribute("userId", currentUser.getUserId()); //跳转到用户主页 // model.addAttribute(currentUser); // model.addAttribute("currentUser", currentUser.getUserName()); //RequestDispatcher rd = request.getRequestDispatcher("wel.jsp"); //rd.forward(request, response); flag=true; } } else { flag=false; } PrintWriter out = response.getWriter(); out.print(flag);//返回登录信息 out.flush(); out.close(); } catch (Exception e) { throw new Exception(e); } }
function checkLogin() { // var form = new FormData(document.getElementById("user")); var loginName=$("#loginName").val(); var passWord=$("#passWord").val(); if(loginName == ""){ alert("请输入用户名"); return false; }else if(passWord == ""){ alert("请输入密码"); return false; } var data={loginName:loginName,passWord:passWord}; $.ajax({ async: true, dataType:"json", type: 'post', url: "<%=basePath%>login", data: data, success: function (result) { if(result==true){ window.location.href="${blog}/views/Home/Index.jsp"; }else { alert("用户名或密码错误!请联系管理员获取密码") }; // alert("修改成功"); } }); }