点击警告按钮后重定向到页面/URL

12
我已经参考了这两个问题call php page under Javascript functionGo to URL after OK button in alert is pressed。我想在警告框弹出后重定向到我的index.php。我的警告框在else语句中。以下是我的代码:

processor.php

    if (!empty($name) && !empty($email) && !empty($office_id) && !empty($title) && !empty($var_title) && !empty($var_story) && !empty($var_task) && !empty($var_power) && !empty($var_solve) && !empty($var_result)) {

    (some imagecreatefromjpeg code here)

    else{
        echo '<script type="text/javascript">'; 
        echo 'alert("review your answer")'; 
        echo 'window.location= "index.php"';
        echo '</script>';   
    }

它没有显示任何内容(没有警告框,也没有重定向)。当我删除这部分echo 'window.location= "index.php"';时,它会显示警告。但仍然无法重定向到index.php。希望您能帮助我解决这个问题。请不要将其标记为重复,因为我已经做了几篇相关的帖子作为参考。非常感谢您的帮助。

6个回答

31

你的JavaScript行末缺少分号。另外,window.location应该使用.href.replace等来重定向 - 查看此帖子获取更多信息。

echo '<script type="text/javascript">'; 
echo 'alert("review your answer");'; 
echo 'window.location.href = "index.php";';
echo '</script>';

为了更加清晰,尝试保留这些 PHP 标签:

?>
<script type="text/javascript">
alert("review your answer");
window.location.href = "index.php";
</script>
<?php

注意:分号可以单独放在一行,但推荐这样做。但是正如下面的注释所示,在第一个示例中,PHP不会换行,但在第二个示例中会换行,因此在第一个示例中必须使用分号。


分号是可选的。使用它们是个好主意,但不使用也不会出错。 - adeneo
很可能只是location.*的问题。 - scrowler
@adeneo 如果你换行了,它们就是可选的。如果你把它们都放在同一行,那么它们就是必需的。Echo不会自动换行,所以代码将全部在一行上。 - Tim Withers
@TimWithers - 是的,那就是正确答案,只需要添加EOL或\n也可以运行! - adeneo
@adeneo 谢谢,但我该如何将它放在echo中而不会弄乱引号呢?谢谢。 - Jben Kaye
显示剩余5条评论

4
if (window.confirm('Really go to another page?'))
{
    alert('message');
    window.location = '/some/url';
}
else
{
    die();
}

感谢回答我的问题。嗯,对我有效的是scrowler的答案。但您的答案也非常受赞赏!再次感谢。 - Jben Kaye

3

window.location = mypage.href 是一个直接命令,让浏览器倾倒其内容并开始加载更多内容。为了更好地说明,以下是您的 PHP 脚本中正在发生的事情:

echo '<script type="text/javascript">'; 
echo 'alert("review your answer");'; 
echo 'window.location = "index.php";';
echo '</script>';

1) 准备接受对当前Javascript缓存的修改或添加。 2) 显示警报。 3) 转储浏览器内存中的所有内容,并准备好一些更多的内容(虽然这是一种较旧的加载新URL的方法)。 (请注意,这些行之间没有“\n”(换行符)指示符,因此在JS解码器中造成了一些混乱。)

让我建议您以另一种方式处理此问题。

echo '<script type="text/javascript">\n'; 
echo 'alert("review your answer");\n'; 
echo 'document.location.href = "index.php";\n';
echo '</script>\n';

1) 准备接受对当前Javascript缓存进行的修改或添加。 2) 显示警报。 3) 倾倒浏览器内存中的所有内容,并做好迎接更多内容的准备(比以前更好)。哇 - 所有这些都能够工作,是因为JS解码器可以看到每个命令现在都是一条新行。

祝你好运!


非常感谢您的回答。您和Scrowler给了我相同的答案。非常感谢你们的帮助! - Jben Kaye

3
这样,两个句子都会在页面加载完成之前执行。 以下是您的错误,您缺少了一个';' 更改为:
       echo 'alert("review your answer")'; 
       echo 'window.location= "index.php"';

至:

       echo 'alert("review your answer");';
       echo 'window.location= "index.php";';

一些建议: 你真的应该在某些事件后触发那个逻辑。例如:
           document.getElementById("myBtn").onclick=function(){
                 alert("review your answer");
                 window.location= "index.php";
           };

另一个建议,使用jQuery

-1
<head>
<script>
    function myFunction() {
        var x;
        var r = confirm("Do you want to clear data?");
        if (r == true) {
            x = "Your Data is Cleared";
            window.location.href = "firstpage.php";
        }
        else {
            x = "You pressed Cancel!";
        }
        document.getElementById("demo").innerHTML = x;
    }
</script>
</head>
<body>
<button onclick="myFunction()">Retest</button>

<p id="demo"></p>
</body>
</html>

这将重定向到新的 PHP 页面。


-1

PHP的工作示例。
先警告再重定向是有效的....
享受...

echo "<script>";
echo " alert('Import has successfully Done.');      
        window.location.href='".site_url('home')."';
      </script>";

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接