jsp response.redirect导致jquery.mobile出现问题

时间:2012-07-30 13:26:42

标签: java jquery jsp

我的应用程序是使用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'>

4 个答案:

答案 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不可用,请小心。