0

在让他等待 10 秒或 10000 毫秒后,我试图将用户从一个 jsp 页面重定向到另一个 jsp 页面。但是一旦在浏览器中打开页面,就会有一个重定向。为什么会这样?下面的代码有什么问题吗?我正在调用redirectFunction进行重定向的哪个。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP - 1</title>
    <script>
        function redirectFunction() {
            <% response.sendRedirect("jsp-2.jsp"); %>
        }
    </script>
</head>

<body>
    <h1>
        Wait while you are redirected...
    </h1>
    <script type="text/javascript"> 
        setTimeout(redirectFunc,10000); // wait for 10 seconds,then call redirectFunc
    </script>
</body>

4

5 回答 5

1

您完全从服务器发送重定向,这就是它立即触发的原因。

如果您想在 10 秒后触发重定向,则需要更改代码:

function redirectFunction() {
    window.location.href = "jsp-2.jsp"
}

setTimeout(redirectFunction,10000);

实际上,当您调用<% response.sendRedirect("jsp-2.jsp"); %>Java 服务器时,会将 http 代码 302 设置为您的 http 响应,并且标头 Location: jsp-2.jsp 并且浏览器会立即重定向到 Location 标头中指定的页面。

希望能帮助到你。

于 2012-08-24T08:35:10.173 回答
1

scriptlet 中的代码是在服务器上执行的,它不是 javascript。用这个

function redirectFunction() {
            window.location.href = "jsp-2.jsp";
}
于 2012-08-24T08:35:59.877 回答
0

假设您正在使用HttpServletResponse,发生的事情是您正在发送带有状态代码 302 的 HTTP 位置标头。这发生在请求页面时,而不是在 JavaScript 的客户端执行期间。

如果您希望它在 JavaScript 执行期间出现,您需要将您想要的 URL 分配给 window.location。

window.location = "http://google.com";

例如

于 2012-08-24T08:36:10.347 回答
0

这是因为

 <script>
        function redirectFunction() {
            <% response.sendRedirect("jsp-2.jsp"); %>
        }
 </script>

被翻译并执行为

out.print(" <script> function redirectFunction() {");
response.sendRedirect("jsp-2.jsp");
out.print("</script>");
于 2012-08-24T08:36:36.250 回答
0

调用 sendRedirect 在服务器端执行,同时准备您的页面,并执行重定向。您可以使用 window.location 仅在 javascript 中进行睡眠和重定向。

于 2012-08-24T08:40:39.343 回答