使用axios发送请求,servlet验证验证数据后无法转发或重定向

问题

前端发送一个axios的请求验证,想要验证成功后跳转页面

axios.post('http://localhost:8080/javaWeb/RegisController', params)
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //...
    this.getServletContext().getRequestDispatcher("/home.html").forward(req, resp);
}
使用axios发送请求,servlet验证验证数据后无法转发或重定向

使用axios发送请求,servlet验证验证数据后无法转发或重定向

可以看到请求标头和响应体都已经返回,但是页面就是没有跳转,还是停留在原来的页面

原因

原因其实也不难,主要是servlet拿到的是ajax发送过来的request,也就是说这个请求不是浏览器请求的,而是ajax请求的,所以,servlet对request进行请求转发或重定向都不能影响浏览器的跳转…..也就出现了我们遇到的请求转发和重定向失效的问题.

解决问题

不管正确还是错误,都应该返回一个值给ajax,让ajax去跳转或干其他的事.使用ajax本来就是为了局部刷新网页,而不是跳转

axios.post('http://localhost:8080/javaWeb/RegisController', params)
    .then(response => {
        //成功则改变路径
        location.href = "./home.html"
    }, reason => {
        alert('验证码错误,请重试!');
        //验证码
        addData();
    })
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    if (判断条件){
        //响应状态码
        resp.setStatus(200);
    }else{
        resp.setStatus(404);
    }
}

参考文档:(11条消息) servlet的后台页面跳转和ajax的页面跳转_tao911110的博客-CSDN博客

上一篇:ajax


下一篇:JavaScript在发送AjAX请求时,URL的域名地址是使用绝对地址还是相对地址?