ajax发送POST请求SpringMVC页面跳转失败

问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转。思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可行。那我们的解决方法是什么呢?

我的解决方案是,将判断前移,什么意思呢?服务器值返回Map数据,对应页面跳转状态,将逻辑代码写在js代码中。代码如下:
使用 window.location.href = "/iswust2hand/index.jsp"; 进行相应页面跳转。

为什么使用Ajax向SpringMVC中Controller层发送POST请求无法无论我们使用return "index.jsp"、 转发 、 重定向 还是 ModelAndView,都无法解决页面跳转的问题。
出现这个问题发的原因是什么呢?

原因:

这就要从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";
      }
});

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35325795/article/details/80343338
个人分类: spring_mvc
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭