2011-03-23 37 views
-1

这是我用来按固定时间间隔打网址的示例代码。如果目标网址未返回,该怎么办

$(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是一个将控制权转发给另一个JSP的servlet。根据我的理解,我必须重定向到新页面。但它显示与计数器值1相同的页面。意味着,从目标servlet重定向不起作用。并且回应将回到同一页面。

+1

servlet代码?.. – Bozho 2011-03-23 08:15:14

+0

我的servlet做什么,但检查DB值。如果存在值,则重定向到另一个JSP页面。否则返回致电页 – 2011-03-24 04:07:43

回答

0

AJAX并不意味着重定向。这些标题不会被您的浏览器执行,因此您可以继续浏览该页面! 你的servlet给出的确切代码是什么?

+0

好吧!在你的建议中,我删除了中间页面。我已经在需要重定向的JSP上放置了ajax代码。如果一切正常,我会显示页面内容。否则显示适当的页面。谢谢 – 2011-03-24 04:09:54

0

该代码正在做它写的任务。您正在发射ajax呼叫,并且在响应200中,您将计数器设置为#msg的html。代码中没有任何内容会让您重定向到New Page

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

+0

window.location.href是一个不错的选择。但是由于url在运行时被编码,所以我无法使用它。并且一些动态参数被添加到URL中。 – 2011-03-24 03:56:40

2

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

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

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

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

参考one of answers with example solution

+0

请注意,“forward”是特定的JSP/Servlet术语,这意味着控制器servlet已被指示使用指定的JSP文件作为视图。这里没有HTTP 3nn重定向的方法。 – BalusC 2011-03-23 13:58:01

相关问题