这就要从Ajax的原理说起,Ajax实际上就是通过XMLHttpRequest来发送请求对象向服务器发送异步请求,从服务器获取数据,然后使用JS来操作DOM而更新页面。
也就是说,服务器端返回的是纯文本流,可以是xml格式,html格式,js格式,也可以是字符串格式,但总结一句话,客户端获取ajax异步获取结果后,不是直接显示在页面上,而是必须要先由js处理,完成之后才能显示在页面。这就可以解释我们的问题了,当Ajax请求后,返回的只能是字符流,不是页面。所以要使页面跳转,我的解决方案是,将数据用Map返回,然后将数据交由js去解决,window.location.href = "/iswust2hand/index.jsp"; 跳转就可以。Java代码如下:
/** * 用户登录 */ @RequestMapping(value="/login") @ResponseBody public Map<String, String> login(User user,HttpSession session){ user.setPassword(MD5Utils.str2MD5(user.getPassword())); Map<String, String> message = new HashMap<>(); User u = this.userService.login(user); if(u!=null){ session.setAttribute("user", u); return message; message.put("code", "登陆成功!"); }else{ message.put("code", "用户名或密码错误!"); } }js代码如下:
$.post('../user/login', {"phone":uphone,"password":upwd}, function(data) { if(data.code=="登陆成功!"){ location.href="../html/myHome.html"; }else{ location.href="../html/login.html"; } });