ASP中的數據提交是一個非常重要而且常用的環節,如何避免數據重復提交是個常見的問題,一般數據重復提交有2種方式:一、刷新提交后的頁面,會提示重新發送信息,選擇重試就會重復提交;二、按back返回再提交;所以很多人都問如何禁止back按鈕的問題,這個至少目前是無法真正做到的。
我的思路是:提交數據的時候做數據合法校驗,校驗通過后打開一個“隱藏”的窗口(其實是顯示在屏幕之外的一個小窗口)來進行提交處理,數據保存成功后刷新父窗口并用alert顯示保存狀態然后關閉此隱含窗口,這樣用戶就無法用back返回而且提交后的窗口已關閉,避免重復刷新。
下面是我的演示,只有2個文件:submitdemo.asp 和 save.asp,非常簡單,只要稍微修改就可以應用到你的程序里,希望對大家有幫助。
1.submitdemo.asp 演示數據輸入和校驗主程序 ------------------------------------------
<html> <head> <title>new/edit</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script language="JavaScript"> <!-- //打開一個位置在屏幕之外的窗口 function NewHideWindow(mypage,myname) { LeftPosition = parseInt(screen.width)+1; TopPosition = parseInt(screen.height)+1; settings ='height=100,width=100,top='+TopPosition+',left='+LeftPosition+',scrollbars=0,resizable=0,status=0' window.open(mypage,myname,settings) } //數據校驗函數 function validate(theForm) { if(theForm.text1.value == "") { alert("請填寫text1的數據!"); theForm.text1.focus(); return (false); } if(theForm.text2.value == "") { alert("請填寫text2的數據!"); theForm.text2.focus(); return (false); } return (true); } //調用上面兩個函數校驗輸入的數據并打開保存數據窗口 function savewin(theForm) { if(validate(theForm)) { NewHideWindow('about:blank','SaveWindow'); return true; } return false; } --> </script> </head>
<body bgcolor="#FFFFFF"> <!--注意這里的 onsubmit 的函數調用和 target 中的窗口名字要和 savewin 函數中NewHideWindow寫的窗口名一致(注意大小寫)--> <form name="form1" action="save.asp"onsubmit="return savewin(this);" target="SaveWindow"> text1: <input type="text" name="text1"><br> text2: <input type="text" name="text2"> <input type="submit" name="Submit" value="提 交"> </form> </body> </html>
2.save.asp 保存數據處理 ------------------------
<% Dim intStatus '********************************************************** '*保存數據到數據庫,在此最好再進行一次數據的合法校驗* '*... * '*If 保存成功 Then* '* intStatus = 1* '*Else* '* intStatus = -1 * '*End If* '**********************************************************
'成功測試 'intStatus = 1
'失敗測試 intStatus = -1 %> <html> <head> <title> </title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script> <!-- <% If intStatus=1 Then response.write "window.opener.location.reload();" response.write "alert('保存成功!');" response.write "window.close();" Else If intStatus=-1 Then response.write "alert('保存失敗,請檢查輸入的數據是否完整有效!');window.close();" Else response.write "window.close();" End If End If %> //--> </script> </head>
<body bgcolor="#FFFFFF"> </body> </html>
|