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>
|