|
ASP中的數(shù)據(jù)提交是一個(gè)非常重要而且常用的環(huán)節(jié),如何避免數(shù)據(jù)重復(fù)提交是個(gè)常見的問題,一般數(shù)據(jù)重復(fù)提交有2種方式:一、刷新提交后的頁面,會提示重新發(fā)送信息,選擇重試就會重復(fù)提交;二、按back返回再提交;所以很多人都問如何禁止back按鈕的問題,這個(gè)至少目前是無法真正做到的。
我的思路是:提交數(shù)據(jù)的時(shí)候做數(shù)據(jù)合法校驗(yàn),校驗(yàn)通過后打開一個(gè)“隱藏”的窗口(其實(shí)是顯示在屏幕之外的一個(gè)小窗口)來進(jìn)行提交處理,數(shù)據(jù)保存成功后刷新父窗口并用alert顯示保存狀態(tài)然后關(guān)閉此隱含窗口,這樣用戶就無法用back返回而且提交后的窗口已關(guān)閉,避免重復(fù)刷新。
下面是我的演示,只有2個(gè)文件:submitdemo.asp 和 save.asp,非常簡單,只要稍微修改就可以應(yīng)用到你的程序里,希望對大家有幫助。
1.submitdemo.asp 演示數(shù)據(jù)輸入和校驗(yàn)主程序 ------------------------------------------
<html> <head> <title>new/edit</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <script language="JavaScript"> <!-- //打開一個(gè)位置在屏幕之外的窗口 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) } //數(shù)據(jù)校驗(yàn)函數(shù) function validate(theForm) { if(theForm.text1.value == "") { alert("請?zhí)顚憈ext1的數(shù)據(jù)!"); theForm.text1.focus(); return (false); } if(theForm.text2.value == "") { alert("請?zhí)顚憈ext2的數(shù)據(jù)!"); theForm.text2.focus(); return (false); } return (true); } //調(diào)用上面兩個(gè)函數(shù)校驗(yàn)輸入的數(shù)據(jù)并打開保存數(shù)據(jù)窗口 function savewin(theForm) { if(validate(theForm)) { NewHideWindow('about:blank','SaveWindow'); return true; } return false; } --> </script> </head>
<body bgcolor="#FFFFFF"> <!--注意這里的 onsubmit 的函數(shù)調(diào)用和 target 中的窗口名字要和 savewin 函數(shù)中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 保存數(shù)據(jù)處理 ------------------------
<% Dim intStatus '********************************************************** '*保存數(shù)據(jù)到數(shù)據(jù)庫,在此最好再進(jìn)行一次數(shù)據(jù)的合法校驗(yàn)* '*... * '*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('保存失敗,請檢查輸入的數(shù)據(jù)是否完整有效!');window.close();" Else response.write "window.close();" End If End If %> //--> </script> </head>
<body bgcolor="#FFFFFF"> </body> </html>
|