2013-07-31 54 views
1

我有一個簡單的形式,它有四個字段名爲firstName,lastName,地址和電話號碼。如何防止單擊後退按鈕後重新填充表單域?

用戶填寫此表單並單擊提交按鈕後,如果一切正常,我將該用戶重定向到成功頁面。

但是,單擊成功頁面上的瀏覽器後退按鈕,表單字段值將重新填充到表單上。我怎樣才能防止這種情況發生?

我已經嘗試過這樣的代碼:

<cfheader name="cache-control" value="no-cache, no-store, must-revalidate"> 
<cfheader name="pragma" value="no-cache"> 
<cfheader name="expires" value="#getHttpTimeString(now()-1)#"> 

但它無法正常工作。

回答

5

重新填充表單域是一個的事情,不要試圖打破它。

如果你真正想要的是防止重複提交,發送一個唯一的ID(例如UUID)以及表格並跟蹤你最近收到的信息(有多少信息取決於你的應用) 。

如果您收到重複項,您可以忽略它(並顯示相應的消息),或者更進一步:檢查接收到的數據是否已提交,或者是否嘗試更改以前的提交(即修復打字錯誤),或創建一個新記錄(可能名字和電話被改變),或提示用戶選擇,或其他。

+3

我完全同意。要問的最大問題是「我的最終目標是什麼?」如果你只是想阻止人們重新提交表格,彼得的建議是一個好方法。如果你想阻止人們回到形式,那麼你可能想問自己爲什麼。使用後退按鈕更新表單可能不合需要,但從用戶的角度來看這並非不合理。如果你不想雙重提交,你應該在表單提交時檢查這個。 從個人經驗來說,重新編程正常的瀏覽器行爲真的很吸引人。 – Shawn

+0

是否是件好事不是問題 –

2

重新填充表單字段是一個很好的想我知道,但是我們可以通過 自動完成禁用它=「關閉」

+4

當你是用戶時,autocomplete = off是很煩人的。 –

+2

'autocomplete'屬性用於在您第一次訪問該頁面時(基於您之前填寫類似表單的方式)預填表單,而不是單擊後退按鈕。 –

+0

是的,我知道,但它也適用於我的情況,也適用於所有瀏覽器。 –

0

,當我運行這個工程。首先,文件testform.cfm

<cfsetting showdebugoutput="no"> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0  
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<CFHEADER NAME="Cache-Control" VALUE="no-cache, no-store, must-revalidate"> 
<!--- this is meant for legacy HTTP 1.0 servers 
- only prevents caching when used with secure communications (https://) ---> 
<CFHEADER NAME="Pragma" VALUE="no-cache"> 
<!--- this doesn't prevent caching, 
just means for future requests that browser must contact server for fresh copy. 
cached copy used for BACK and FORWARD buttons---> 
<CFHEADER NAME="Expires" VALUE="-1"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<form action="formtarget.cfm" method="post"> 
<input type="text" name="x" value="" /> 
<input name="submitbutton" type="submit" /> 
</form> 
</body> 
</html> 

這是formtarget.cfm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 
<body> 
<cfdump var="#form#"> 
</body> 
</html> 

我們有一個自定義的標籤這三個cfheader標籤。

相關問題