【问题标题】:jsp response.redirect causes problems with jquery.mobilejsp response.redirect 导致 jquery.mobile 出现问题
【发布时间】:2012-07-28 04:24:39
【问题描述】:

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

【问题讨论】:

    标签: java jquery jsp


    【解决方案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】:

      ajax 内你必须这样做:

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

      这会将您重定向到 服务器

      data 中指定的网页

      【讨论】:

      • 如果您被重定向到的页面返回 JSON 数据,那很好,而登录页面可能不会出现这种情况。
      • 重点是要有一些var, flag让服务器告诉ajax解析代码重定向。可能是一个特殊的标头,也可能是响应中的唯一字符串,例如“NO_RESOPONSE_REDREICT_TO:http...url...”解析它并转到 url
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        这与AJAX有关,我的解决方案是: 添加data-ajax="false" 作为&lt;form&gt; 的属性。就像我做的那样:

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

        这将导致您的 ajax 不可用,小心。

        【讨论】:

        • 这似乎与实际问题完全无关。我也很确定只是将data-ajax="false" 随机添加到您的&lt;form&gt; 标签不会有任何作用。
        • @AnthonyGrist ,实际上它确实做了一些事情,但这不是问题所需要的。
        猜你喜欢
        • 2015-09-07
        • 2012-11-01
        • 2011-05-22
        • 1970-01-01
        • 1970-01-01
        • 2017-06-14
        • 2016-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多