最近在做一个项目,点击搜索按钮后,跳转到指定的servlet从数据库中取数据,然后通过request请求转发,将数据返回到页面刷新
req.getRequestDispatcher("RentSearch.jsp").forward(req,resp);
测试许久,都没有效果!后来才发现,如果表单是用ajax提交的,那么servlet内部无论是使用response.sendRedirect 或者 request.getRequestDispather() 都是无效的,这是为什么呢?
因为servlet拿到的是ajax发送过来的request,而不是浏览器发送的请求的,所以servlet对request进行请求转发和重定向对浏览器都不能影响浏览器的跳转,这就是请求转发和重定向失效的原因。
解决方案
方案一:
要想让 response.sendRedirect() 生效,一定不能使用 ajax,只能使用同步的 form 表单提交;像这样
<form action="RentSearchServlet">
<input type="text" name="" placeholder="请输入搜索物品...">
<input type="submit" >
</form>
方案二:
不管正确还是错误,都应该返回一个值给ajax,让ajax去跳转或干其他的事.使用ajax本来就是为了局部刷新网页,而不是跳转。