|
登录后查才能浏览下载更多咨询,有问题联系QQ:3283999
您需要 登录 才可以下载或查看,没有账号?入住遨海湾
×
提交后禁用提交按钮(大部分人都是这样做的)+ |4 H9 l" _- i+ \9 E& _
3 c2 _7 ?, o# ?# f3 K9 y4 ^1 g
如果客户提交后,按F5刷新怎么办?8 u0 }# ? H" c9 N! `& E- G
+ ?$ ]' A4 X5 j! _9 s Z0 G/ G使用Session( b. l& m0 A: p: o, S2 [, [
1 j' N0 S6 p' Y! G/ C' w+ ` L
在提交的页面也就是数据库处理之前:( O3 G+ @6 ^ {/ L- b ^# r; B
& l$ T8 j6 }0 L1 \if session("ok")=true then6 J$ Q1 I4 w$ _% I% I
response.write "错误,正在提交"
' }0 |& Q# X; P response.end
6 T* ~: B5 N/ w& O0 J: fend if
3 N b: N* V, c0 {% y% `2 F! J* r1 a( g: s8 O4 E
数据处理完后,修改session("ok")=false。
/ ?+ j# r. h' ~1 u( t2 s; k9 B7 E# y$ A3 F. T
数据处理成功马上Redirect到另外一个页面. D) j7 c+ s. d# g
$ m& a- N$ y! i操作后刷新的确是个问题,你可以使用跳转页面、关闭本页面,如果是有参数据条件来控制的,那就应该好做了,可以直接修改window.location的值,把参数全部改掉,这样就差不多了。 " D9 h0 H$ M' B$ M; j
! t9 t0 Y5 {, N2 R6 ^. B6 u/ \
缺点:简单地运用Response.Redirect将不再有效,因为用户从一个页面转到另一个页面,我们都必须用客户端代码清除location.history。注意,这种方法清除的是最后一个访问历史记录,而不是全部的访问记录。 点击后退按钮,再点击后退按钮,你可以看到这时打开的是本页面之前的页面!(当然,这是在你的客户端启用了JavaScript功能的条件下。)
) n. Q+ I- @7 E/ `1 y1 n. i1 P" b
如果客户按后退,怎么办?
7 l% C5 e6 J, [6 Z' [, |" f
9 T# b; o3 z9 S2 y! [防止网页后退--禁止缓存
6 [$ ^, w$ P. _# b J+ c
8 o2 A9 J- c, Q2 }# ?( q& W) o我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的,像一般网上很多禁止缓存的代码,有时并不可靠,这时你只要在操作的页面加上就可以了,在网页的里指定要定向的新页,再点后退,看是不是不会再退到刚才的操作页面了,实际上已经把这个历史给删除了
* B# v6 [1 D B" E6 M. |* S
" u1 r* F5 ]3 I5 l3 N4 _* hASP:
8 w Z8 T; u# n! P/ kResponse.Buffer = True
5 d' i7 h9 Z9 A' z u1 KResponse.ExpiresAbsolute = Now() - 1
9 z7 c( e$ x, m4 B, t( A) ?0 aResponse.Expires = 0 * n5 f1 i; }+ z( B) ?7 x
Response.CacheC
2 H1 K: d3 M) }8 y" X4 N3 F1 N; E" m. c) \/ L
ASP.NET:
( ]2 Z- @1 L% Z5 ^2 E- xResponse.Buffer=true;' n, ~; U' f9 A! @( [
Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);; t8 v7 \% F X7 \/ `- K' \" x
Response.Expires=0;
/ C0 n6 G, _2 \' ?9 f- ` uResponse.CacheC;
3 U/ D h8 }! z$ {: k' ?; \
1 Q# S0 v+ r' j, I( E' ~究竟怎样才能"禁用"浏览器的后退按钮?或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”
3 J" K6 V0 A& Z7 ^2 Q" l0 d$ \ B3 y
遗憾的是,我们无法禁用浏览器的后退按钮。0 } G) e( q& t$ M9 C& U8 u
' S- F9 F& @; `1 b
防止网页后退--新开窗口' Z+ t" e8 P- V. V+ Y+ @; q
. d" I! w5 K/ V6 m( z1 J
用window.open弹出表单页面,点提交后关闭该页;处理提交的ASP页也是用弹出,设定表单的target,点提交时window.open("XXX.asp","_blank"),然后用JS来提交表单,完成后window.close();# N* |- n }; D$ y$ q. w
简单的说,就是提交表单的时候弹出新窗口,关闭本窗口。对于window.open()打开的窗口怎么后退?能后退到哪里去?+ W$ [4 E# g& w/ O
, g e- h: f; f又一个新方法,放在ASP页面前面就可以了,其他如JSP也可以仿照一下~~$ w0 k d# ^& K) M, Q9 Q% I$ m
. ~/ B" `+ b) y<%
3 k! j; S8 ^% q. t! C" odim RefreshIntervalTime
, h+ c! z# Y3 V! q) t2 JRefreshIntervalTime = 3 '防止刷新的时间秒数,0表示不防止
8 U& q* X! |' r2 b1 r9 V( D( `$ v0 iIf Not IsEmpty(Session("visit")) and isnumeric(Session("visit")) and int(RefreshIntervalTime) > 0 Then& T- m9 Y% b" ?2 P0 s: e$ N
if (timer()-int(Session("visit")))*1000 < RefreshIntervalTime * 1000 then
$ J' v8 @( V8 O* W Response.write ("<meta http-equiv=""refresh"" c"& RefreshIntervalTime &""" />")
0 L1 o$ i! Y0 v8 i" l& V Response.write ("刷新过快,请稍候")" s. v, R; ^4 M: A
Session("visit") = timer()
1 N2 L; O8 x j Response.end
3 i8 N. D& K5 f3 n2 Q; X- `end if
1 ]6 W% I. t$ s7 r- ]End If
- [8 B+ T3 w' sSession("visit") = timer()
5 c" L/ I* f" i* Q- E; ~+ \%> |
|