如果我使用PHP重定向javascript警报不工作?

时间:2011-04-03 06:50:04

标签: 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=countries');
        exit;
    }

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

5 个答案:

答案 0 :(得分:2)

  

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

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

使用警报是通知用户某些操作的非常糟糕的方法。最糟糕的是我会说 并且JS重定向不是可行的方法,你可以在POST请求后发送303状态。

如果您想为您的用户带来麻烦,您必须

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

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

答案 1 :(得分:1)

实际上,该代码应该抛出错误。您可能要么禁用错误报告,要么可能是输出缓冲(?)。

在任何情况下,你都不能像这样使用PHP。您需要使用JS

进行重定向
window.location = URL

您必须记住,在浏览器解析它之后,客户端会发生警报,​​而PHP会在服务器端执行标头重定向。两件非常不同的事情。

答案 2 :(得分:1)

我猜你在header函数之前不能有任何输出。在这种情况下,您在标头之前输出<script type="text/ja.....。所以这应该有用。

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');

location-manager.php

if($_GET['error']=='true')
{
    echo "Something went wrong";
}

答案 3 :(得分:0)

您无法在标题上方显示任何数据。没有HTML,没有javascript,没有。

我建议使用纯javascript重定向页面而不是标题重定向。您可以在提醒后设置window.location来执行此操作。

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

This tutorial显示了如何进行延时重定向。 Example here。您可能希望这样做以通知您的用户他们访问了错误的网址,他们应该更改他们的书签或指向旧网址的链接。

如果你想要标题重定向,你应该使用这个代码,但不会执行javascript。

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

答案 4 :(得分:-1)

在'location'后面添加一个空格:

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

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