【问题标题】:What if targeting URL is not returning back如果目标 URL 没有返回怎么办
【发布时间】:2011-03-23 08:11:19
【问题描述】:

这是我用来以固定时间间隔点击 URL 的示例代码。

$(document).ready(function() {
    var counter = 1;

    $.doTimeout( 1000, function() {
        $.ajax({
            type: "GET",
            url: "<%=encodeUrl%>",
            timeout: 10000,
            dataType: "text",

            complete: function(resp) {
                if (resp.status == 200) {
                    $("#msg").html(counter++);
                } else {
                    $("#msg").html("Failed");
                    return true;
                }
            }
        });
    });
});

目标 URL 是一个 servlet,它将控件转发到另一个 JSP。根据我的理解,我必须被重定向到新页面。但它显示与计数器值 1 相同的页面。意味着,从目标 servlet 重定向不起作用。并且响应返回到同一页面。

【问题讨论】:

  • 我的 servlet 只检查数据库值。如果存在值,则重定向到另一个 JSP 页面。否则返回调用页面

标签: java jquery ajax servlets


【解决方案1】:

当您的 AJAX 响应是重定向到另一个页面时,重定向的页面将作为您的 AJAX 请求的响应被提取,这就是为什么您的 HTTP 状态只有 200。

您无法根据通过 AJAX 收到的 HTTP 状态代码处理重定向。

除非您对其进行编程,否则 AJAX 响应无法将您重定向到其他页面。

因此,如果您想根据您的 AJAX 响应进行重定向,您应该修改服务器端代码以将重定向 URL 作为响应发送给您,而不是重定向。

参考one of answers with example solution

【讨论】:

  • 请注意,“forward”是一个特定的 JSP/Servlet 术语,这意味着控制器 servlet 被指示使用指定的 JSP 文件作为视图。这里没有 HTTP 3nn 重定向。
【解决方案2】:

AJAX 并不意味着重定向。这些标题不会被您的浏览器执行,因此让您留在该页面上! 您的 servlet 返回的确切代码是什么?

【讨论】:

  • 好吧!根据您的建议,我删除了中间页面。我在需要重定向的 JSP 上放置了 ajax 代码。如果一切正常,我会显示页面内容。否则显示适当的页面。谢谢
【解决方案3】:

代码完全按照它所写的去做。您正在触发一个 ajax 调用,在响应 200 中,您将计数器设置为#msg 的 html。代码中没有任何内容可以让您重定向到New Page。

如果要重定向,则此处不需要 ajax。否则,如果您的重定向基于 servlet 返回的响应,请将其捕获到 complete 并设置 window.location.href = 'your/redirect/url/' 以加载新页面。

【讨论】:

  • window.location.href 是一个不错的选择。但我不能使用它,因为 url 是在运行时编码的。并且在 URL 中添加了一些动态参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 1970-01-01
相关资源
最近更新 更多