如果使用php重定向,javascript警报不起作用?

如果使用php重定向,javascript警报不起作用?,php,javascript,Php,Javascript,我写过类似这样的代码 if(!isset($cid)) { echo "<script type=\"text/javascript\">alert('OOps, Something went wrong, please make sure you select country from the list')</script>"; header('Location:location-manager.php?view=coun

我写过类似这样的代码

    if(!isset($cid))
    {
        echo "<script type=\"text/javascript\">alert('OOps, Something went wrong, please make sure you select country from the list')</script>";
        header('Location:location-manager.php?view=countries');
        exit;
    }
if(!isset($cid))
{
echo“警告(‘哎呀,出了点问题,请确保您从列表中选择了国家’)”;
标题('Location:Location manager.php?view=countries');
出口
}

上面的代码只会重定向页面并忽略JS警报。如果我删除header(),它将使用JS警报框发出警报。我的代码有什么问题?难道我不可能用JS alert中的错误提醒用户,然后将其重定向到所需页面吗?

实际上,该代码应该抛出一个错误。您可能禁用了错误报告功能,或者可能是输出缓冲功能(?)

在任何情况下,你都不能用PHP那样做。您需要使用JS进行重定向

window.location = URL

您必须记住,当PHP在服务器端执行头重定向时,警报在浏览器解析后在客户端发生。两件截然不同的事情

在“位置”后添加空格:

header('Location: http://www.example.com/');

您应该在重定向之后,而不是在重定向之前,在新页面上添加js消息。

标题上方不能有任何数据。没有HTML,没有javascript,什么都没有

我建议使用纯javascript重定向页面,而不是使用标题重定向。您可以通过在警报后设置
window.location
来完成此操作

window.location = "http://www.google.com/"
演示如何进行延时重定向。您可能希望这样做来通知用户他们访问了错误的url,并且他们应该更改指向旧url的书签或链接

如果您想要头重定向,您应该使用此代码,但不会执行javascript

header('HTTP/1.1 301 Moved Permanently');
header('Location: http://www.example.com');

我猜在
header
函数之前您不能有任何输出。在这种情况下,您有输出

如果我使用php的重定向,为什么js警报不起作用

因为您正在使用配置文件中的输出缓冲ob_start()。 当你们打开缓冲区时,你们不是有意让浏览器忽略标题前的所有文本吗?那你为什么现在问

使用警报是通知用户某些操作的一种非常糟糕的方式。我认为这是最糟糕的一个。
JS重定向不是一个好办法,你应该在POST请求后发送303状态

如果你想不给你的用户带来麻烦,你必须

  • 使用AJAX发送表单,然后使用一些动态div进行通知

  • 使用会话存储警报消息,然后使用
    位置:
    标题重新加载页面,然后在某个动态div中显示消息并将其从会话中删除


header命令实际上被发送到客户端。浏览器解析它并在客户端重定向。不,我的错误报告为“是”,我正在使用输出缓冲。ob_start()放在我的配置文件中。哦,谢谢你解释我明白了@菲利普:是的,你当然是对的。Apache向浏览器发送状态3xx。不记得确切的代码。最常见的是“301永久移动”,但正如您所提到的,还有一堆其他3xx代码:)即使我使用ob_start(),它也不会工作,我已经在上面的配置文件中包含了它。不,因为浏览器将获得重定向头,然后立即向重定向url发送请求,并完全忽略在此之后发送的任何内容。我相信在您的标题设置php代码中也有一个错误(尽管浏览器可能理解您的意思并执行此操作)。有关正确的标题,请参见我的编辑。这不是问题所在。问题是混合了JS和头重定向。Javascript(或任何相关内容)在重定向后将不起作用。除非禁用Javascript,否则用户将坐在那里不知道发生了什么on@Philip我根本不打算重定向(使用php)。在重定向之前我会发出警报。。我喜欢第一种方法,不管怎样,我计划使用ajax。这样我可以更好地显示错误。谢谢你给我的建议。
echo "<script type=\"text/javascript\">alert('OOps, Something went".
     "wrong, please make sure you select country from the list');".
     "window.location = 'http://google.com;'</script>";
header('Location:location-manager.php?view=countries&error=true');
if($_GET['error']=='true')
{
    echo "Something went wrong";
}