2014-09-30 57 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