如何防止ajax驱动的表单被提交两次?

时间:2011-02-21 23:43:40

标签: ajax forms grails submit double-submit-problem

在处理Grails应用程序时,我正在使用Ajax的第一步。我正在使用

<g:form ...>  
  <g:submitToRemote ... />
</g:form>

以最简单的方式开箱即用(感谢Grails!)。问题是,Ajax调用需要大约2秒才能返回并更新html(至少在测试系统上),在此期间,用户可以(并且实际上经常)再次点击提交按钮。目前这导致第二次调用最终破坏了输出(msg说错误,一次无法提交相同的数据两次)。

防止这种情况的最佳方法是什么?

提前感谢您的意见!

2 个答案:

答案 0 :(得分:4)

处理此问题的最佳方法是在onSubmit()函数中disable the submit button。老实说,我不知道为什么更多的网站不这样做。我经常进行下一步,而不是禁用提交按钮,我将提交按钮放在span标签中,并将span标签的内容替换为静态文本“Please wait ...”,这样您的用户就可以得到他们按下的视觉反馈按钮和“顶级男人正在努力”。

答案 1 :(得分:0)

正如dj_segfault所说,你可以这样做。

如果您想在控制器中对此进行验证,请查看官方文档中的“处理重复表单提交”:

http://grails.org/doc/latest/guide/theWebLayer.html#formtokens