我的代码写得像这样。
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警报中的错误提醒用户,然后将其重定向到所需的页面?
答案 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消息,而不是在重定向之前的新页面上。