3

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

4 回答 4

1

ajax中你必须这样做:

success: function(data, textStatus) {
        if (data.redirect) {
            // data.redirect contains the string URL to redirect to
            window.location.href = data.redirect;
        }
}

这会将您重定向到服务器指定的网页data

于 2012-07-30T13:35:35.830 回答
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;
    }
});
于 2012-07-30T13:52:23.960 回答
0

从技术上讲,Ajax 调用不支持重定向(调用总是在调用者端结束)。您可能需要在客户端识别响应代码并进行客户端重定向,例如 window.location(href)

于 2012-07-30T13:29:50.360 回答
-1

我也有这样的问题,我找到了有效的解决方法,希望对你有帮助:

This has something to do with AJAX, and my solution is : add data-ajax="false" as an attribute of your <form>. Just like I did:

<form id="reg-input" action="/Myservlet" method="post" data-ajax="false">
    <!-- .. -->
</form>

this will cause your ajax unavailable, take care.

于 2013-06-06T18:01:49.383 回答