为什么Javascript不显示警报?

时间:2018-09-09 05:46:22

标签: javascript php

初学者在这里。 我不明白为什么在使用标头语句时没有弹出警报,但是在删除标头位置行时警报弹出就很好了。真的很困惑:(

<?php
include "connect.php";
session_start();
// if(isset($_SESSION['user_id'])
if(isset($_POST['register'])){
echo '<script language="javascript">';
echo 'alert("message successfully sent")';
echo '</script>';
$name=$_POST["name"];
$roll=$_POST["roll"];
$year=$_POST["year"];
$pass=$_POST["register_password"];
$sql="INSERT INTO students (roll_id,name,year,password) VALUES 
('$roll','$name','$year','$pass')";
$query=mysqli_query($conn,$sql);
if(!$query)
{
   echo "Not Inserted" . mysqli_error($conn);
 }
 header("location:index.php?registered=true");
}
?>

3 个答案:

答案 0 :(得分:1)

问题是header()需要在任何输出之前发送,以便将页面重定向到另一个URL。那时,您已经在回声了,因此通过标头进行重定向将无效。

在这种情况下,(要弹出消息然后重定向的位置),您应该使用javascript重定向:

echo '<script language="javascript">';
echo 'window.location.replace("/index.php?registered=true");';
echo '</script>';

这将输出您的弹出消息。用户单击确定后,将运行javascript重定向代码,并将页面重定向到/index.php?registered=true

此外,您也可以将警报框添加到您要重定向的页面上。请参见以下示例index.php文件:

<?php

if (isset($_GET['registered'])) {
    echo '<script>alert("You have registered!");</script>';
}

//Continue with rest of page.

如果您走这条路线,请不要在寄存器页面上包含ANY输出(无回声),因此header()是唯一的输出。理想情况下,这将是更好的用户体验,因为他们在单击显示alert("message successfully sent")的框时没有弹出白色页面。

答案 1 :(得分:1)

这是因为在显示JavaScript警报之前,位置标头会重定向到其他页面。

将警报添加到目标页面,它将在此处显示。

答案 2 :(得分:0)

像这样回声:

echo "<script>alert('message sent'); window.location.href='url';</script>";