我在弹出窗口中有一个表单。用户填写详细信息并提交表单。在表单提交时,弹出窗口关闭,用户被重定向到主页。提交时,主屏幕上会显示一条消息(表单提交是否成功)。这是通过在主页url中添加参数来完成的。
当用户打开网站时,网址将为..../home
。用户点击弹出按钮并提交表单。
成功时,网址将重定向到..../home?error=0
如果失败,该网址将被重定向到..../home?error=1
根据错误标志值,我在主页上显示消息。
在此步骤之后,如果用户刷新主页,他仍然会收到表单提交消息,因为错误标志出现在URL中。但刷新后,我不想在主页上显示消息。
因此,我尝试使用以下代码删除/设置页面刷新时的错误标志。
> $(window).unload(function() {
> var currentURL = window.location.href;
> var index = currentURL.indexOf("?error=");
> if(index > -1) {
> window.location.href = currentURL.substring(0, index);
> } });
它适用于Firefox,但不适用于Chrome。未在其他浏览器中测试过。但jQuery unload已在1.8中弃用。
如何在页面刷新时删除/设置错误标志?或者是否有其他方法在页面刷新后不在主页上显示消息。该解决方案应该适用于所有主流浏览器(IE,chrome,firefox。opera,safari)
注意:这是Change the URL on page refresh
的延续感谢您的帮助!
答案 0 :(得分:1)
您可以使用$ _SESSION,在这种情况下,在显示页面后清除POST值。下次加载页面时,$ _SESSION变量将消失。按顺序:
表单提交> method = $ _SESSION
加载主页,检查$ _SESSION变量集>显示消息
清除$ _SESSION变量
重新加载页面?未设置post变量,因此转到主页而不显示消息
答案 1 :(得分:1)
我会在服务器端而不是客户端解决此问题,例如使用$ _SESSION标志。
在home的代码中,将代码放在最开头(如果你使用的是PHP):
<?php
// If there is an error message to show
if (isset($_GET['error'])){
// and we still haven't shown it
if (empty($_SESSION['error_shown'])){
$_SESSION['error_shown'] = 1; // set the flag that the message is showing right now
}else{
// if we already have shown the error message, unset the flag and redirect to the URL with no message
unset($_SESSION['error_shown']);
header('Location: /home');
die();
}
}
?>
... your error messages here with the rest of content
代码可能有一些错误,我没有测试过,但这个想法很清楚。
答案 2 :(得分:1)
同样的问题我已经面临并且在解决方案之下帮助我尝试了这个。
阅读网址:
var url = window.location;
改变它:
window.location.replace(url);
更改并重定向:
window.location = url;
答案 3 :(得分:0)
beforeunload应该可以在Chrome上正常运行!
$(window).on('beforeunload', function() {
var currentURL = window.location.href;
var index = currentURL.indexOf("?error=");
if(index > -1) {
window.location.href = currentURL.substring(0, index);
}
});
答案 4 :(得分:0)
`$(window).unload(function() {
var currentURL = document.location.href;
var index = currentURL.indexOf("?error=");
if(index > -1)
document.location.href = currentURL.substring(0, index);
});`