2014-09-30 38 views
1

我在弹出窗口中有一个表单。用户填写详细信息并提交表单。在表单提交时,弹出窗口关闭,用户重定向到主页。提交时,主屏幕上会显示一条消息(表单提交是否成功)。这是通过在主页上添加一个参数来完成的。在刷新页面时更改获取URL参数

当用户打开网站时,网址将是..../home。用户点击弹出按钮并提交表单。

成功时,该URL将被重定向到..../home?error=0

失败时,URL将被重定向到..../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卸载在1.8中已被弃用。

如何删除/设置页面刷新错误标志?还是有其他方法可以在页面刷新后不在主页上显示消息。该解决方案应工作在所有主要浏览器(IE,Chrome浏览器,火狐歌剧,Safari)。

注:这是Change the URL on page refresh

感谢您的帮助的延续!

回答

1

您可以使用$ _SESSION,在这种情况下,在显示页面后清除POST值。下次页面加载时,$ _SESSION变量将消失。在序列:

形式提交>方法= $ _SESSION

加载主页,检查是否$ _SESSION变量设置>显示消息

清除$ _SESSION变量

刷新页面?帖子变量没有设置,所以没有显示消息前往主页

+0

这是行不通的,因为当用户按下F5 Chrome会建议重新发送POST数据。您不能在不使用重定向的情况下在服务器端取消设置POST数据。 – dmikam 2014-09-30 07:49:09

+0

是的你可以,只需设置$ _POST ['error'] =“”例如 – 2014-09-30 07:50:54

+0

这将取消设置当前进程的POST变量,但是如果浏览器窗口刷新 - 浏览器将发回相同的数据。 – dmikam 2014-09-30 07:52:18

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); 
    } 
}); 
+0

不适用于镀铬。我得到“Uncaught TypeError:undefined不是功能” – Saravanan 2014-09-30 09:20:01

0
`$(window).unload(function() { 
    var currentURL = document.location.href; 
    var index = currentURL.indexOf("?error="); 
    if(index > -1) 
     document.location.href = currentURL.substring(0, index); 
});` 
+1

不要犹豫,提供一些关于您的答案的信息,目标是帮助用户解决和了解其问题的原因 – 2014-09-30 07:48:08

+0

我已经尝试它。检查我的帖子。 – Saravanan 2014-09-30 08:57:29

+0

查看Saravan的问题。 – Nik 2014-09-30 09:10:59

1

我会解决在服务器端,而不是客户端这一问题,例如使用$ _SESSION标志。

在回家的代码把这个代码在开始的时候(如果你使用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 

可能有一些错误的代码,我没有测试过,但这个想法是明确。

+0

让我试试这种方法并更新... – Saravanan 2014-09-30 09:44:04

+0

每次刷新页面时,都会创建一个新的会话。我无法检查先前调用时设置的参数(error_show)值。它在每个请求中重置为默认值。 – Saravanan 2014-10-13 11:40:59

+0

你用'session_start()'打开你的会话吗?顺便说一下...我在我的答案中发现了一个错误 - 我使用了不同的名称'error_shown'和'error_show' - 现在它已修复 - 所有错误都是'error_shown' – dmikam 2014-10-14 09:15:56

1

我面对的同样的问题,下面的解决方案帮助我出去试试这个。

读取网址:

var url = window.location; 

改变它:

window.location.replace(url); 

改变和重定向:

window.location = url; 
+0

有步骤来更改URL。我已经做到了。告诉我,我必须让这段代码在页面刷新上工作的地方。 – Saravanan 2014-09-30 08:58:55

+0

你可以在重定向页面上的对话框关闭。正如你的错误信息显示的那样,你点击确定或关闭,然后点击格式化URL。 – Deeps 2014-09-30 10:28:33