IE下表单重复提交

Rubycas的登录在Firefox下没有问题,但是IE下会重复提交表单(post 数据两次),IE6下正常,IE7下偶尔正常,IE8下是一定提交两次。

Rubycas服务端cas.rb文件中validate_login_ticket(ticket)方法片段如下:

 

 lt = LoginTicket.find_by_ticket(ticket)
      if lt.consumed?
        error = _("The login ticket you provided has already been used up. Please try logging in again.")
        $LOG.warn "Login ticket '#{ticket}' previously used up"

它是先到casserver_lt表中看consumed字段是否有值,这个值是在post时候填的,所以连着post两次的话,第二次consumed肯定有值,就会一直警告The login ticket you provided has already been used up. Please try logging in again.

1.刚开始看到网上的方法说可以在form标签的 οnsubmit="getElById('submitInput').disabled = true; return true;('submitInput'为提交按钮或图片的id),经测试,只有我改了view.rb的源码,重启rubycas服务后才能生效(也就是只提交一次表单),但是以后的登录都还是提交两次表单,即只生效一次。

(原文地址 http://www.ms-news.net/f688/ae-c-ae-aeu-e-cs-ae-aeoe-e-i-y-6241629.html

   打不开的话:http://cache.baidu.com/c?m=9d78d513d99816b8589c830f7c01a0650e24f6744ca7c7140fc3e24b84142d563760f4ca503657448dca262147ed5e5d99ed2b37724637b7ec97c95dddcdce7f6ac930340740d1070f871da5c15b769637902cb8b81991e9a72593d88184984353bc04127af6a1ca4d00629938e71447b0f1c41f025f66edfa3013a44e775fd43440c043f9e6316a078ae1dd2a0e83718c270697d86ff6614c&p=9a34de0182904eaf08e295744b42&user=baidu

  )

2.然后又看到说IE缓存机制是提交表单如果检测到参数和上一次相同,就使用缓存中的数据提交,于是我在表单中添加了一个隐藏参数:

input(:type => "hidden", :id => "random", :name=> "random-submit", :value => rand(10000))

这样修改后,每次第一次登录还是会报错The login ticket you provided has already been used up. Please try logging in again.

但是再登录一次又正常了,很是奇怪,其实表单还是提交两次的。

 

3.最后找到的解决方法居然异常的简单,就在submit()后加个return false就可以了。如:

document.formname.submit();
return false;  //加上这个可以确保不会重复提交

(解决方法参考 http://www.diuwo.com/blog/?action=show&id=20

-------------------------------------------------------------------------------------------------------------------------------------------------------

附原文  “IE下使用form表单提交到iframe中出现的重复提交问题

被这个搞的头很大,最终找到原因,问题还是出现在form表单上。
如果你的form是这样写的
<form name="formname" action="topage.php" method="POST" target="ifamename">................
那就会出现这种问题。这个问题所在就是在一开始在from定义中就加了action和target属性。
解决办法就是把这两个移开,等真正提交时,再赋给它这些属性的值。
可参照如下代码:

<form name="formname" οnsubmit="document.formname.action='topage.php'">.......<input type="buttion" οnclick="return check();return false;"></form><iframe name="iframename"></iframe>

然后在check()函数中检查完表单符合提交时再调用document.formname.target="iframename";document.formname.submit();这两句

如:

<script language="javascript">
funcion check() {
    .检查如**不能为空;
      ......
     document.formname.target="iframename";
     document.formname.submit();
return false;//加上这个可以确保不会重复提交
}
</script>
这里两个加红的reurn false可以确保避免重复提交的问题

类似问题就可解决。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值