我的应用程序是使用jsp页面和jquery.mobile构建的。我使用Java函数来检查登录状态,并在Bean内部进行重定向,如下所示:
public String getMenu(HttpSession session, HttpServletResponse response, MenuType menuType, CurrentPage currentPage)
{
if (session.getAttribute("state") == LoginChecked.UNDEFINED))
{
response.sendRedirect("../index.jsp");
return null;
}
else
{
...
问题是,重定向到index.jsp是由jquery.mobile处理的,作为页面内容的ajax重新加载,而不是完整的重定向。
如何强制重新加载index.jsp页面的浏览器?
- 已添加 -
在html中,这将使用像这样的“rel”属性来解决,所以我需要某种方法在我的Java sendRedirect中使用这个rel:
<a href='../index.jsp' data-role='button' data-icon='plus' rel='external'>
答案 0 :(得分:1)
在 ajax 中你必须这样做:
success: function(data, textStatus) {
if (data.redirect) {
// data.redirect contains the string URL to redirect to
window.location.href = data.redirect;
}
}
这会将您重定向到服务器
中data
指定的网页
答案 1 :(得分:1)
我最近在寻找一个类似的问题(实际上是在重定向AJAX请求时重定向),并在这里找到了一个非常好的答案,我显然没有书签。但是,在为自己成功实施之后,我将根据答案分享我采取的方法。
第一阶段是识别AJAX请求,以便可以对标准请求进行不同的处理。这可以通过检查X-Requested-With
请求标头的值来完成;值XMLHttpRequest
表示AJAX请求。在标准请求的情况下,我们正常进行重定向。在处理AJAX请求的情况下,而不是继续进行重定向,我所做的是设置响应标头以表示重定向将发生,并将其值设置为我想要的URL重定向到。
然后,我使用以下jQuery代码检查所有已完成的AJAX请求,并在适当时重定向:
$(document).bind('ajaxComplete', function(event, xhr, options) {
var redirectHeader = xhr.getResponseHeader('YourHeader');
if(xhr.readyState == 4 && redirectHeader != null) {
window.location.href = redirectHeader;
}
});
答案 2 :(得分:0)
从技术上讲,Ajax调用不支持重定向(调用总是在调用者端结束)。您可能需要在客户端识别响应代码并执行客户端重定向,如window.location(href)
答案 3 :(得分:-1)
我也有这样的问题,我找到了一个有效的解决方案,希望它可以帮到你:
这与AJAX有关,我的解决方案是:
添加data-ajax="false"
作为<form>
的属性。就像我一样:
<form id="reg-input" action="/Myservlet" method="post" data-ajax="false">
<!-- .. -->
</form>
这会导致你的ajax不可用,请小心。