Mem*_*eak 20 jsp refresh submit
我正在写一个程序,但是我遇到了一个问题:当我刷新jsp页面时,系统会自动重新提交整个页面,我不知道如何避免它,有人可以帮助我吗?
Tod*_*wen 21
这是对问题的解释......
单击表单上的"提交"按钮会向Web服务器发送请求,其中包括在表单上输入的所有数据.不仅URL而且表单数据也是请求的一部分,浏览器会记住此请求.如果用户单击"刷新",浏览器将重复该请求,再次向Web服务器发送相同的URL 和表单数据.
但是表单可以用两种不同的方式提交,GET或POST,具体取决于"form"标签的"method"属性.有一个约定,GET请求没有副作用; 它只提取数据但不对数据库进行任何更改.另一方面,如果请求更改数据,则应始终使用POST请求.正如我所说,这些只是约定,它们之间没有太大的技术差异,但一个非常重要的区别是浏览器会在用户尝试重复POST时警告用户 - 点击"刷新"会弹出一个对话框警告用户这可能导致重复操作,并确认他们确实要重新提交.刷新GET请求时,浏览器不会显示此确认.
您的表单是否使用了@mk所怀疑的GET方法?如果是这样,将其更改为POST是最简单的解决方案,因为这至少意味着如果用户尝试刷新则会收到警告.
但更好的解决方案是@cletus提出的POST + REDIRECT + GET惯用法.这将数据库更新(POST)和视图(GET)分成两个操作.单击浏览器上的刷新然后只重复GET,它没有副作用.
cle*_*tus 13
你想要的成语是:
POST + REDIRECT + GET的工作原理如下:
这样做的好处是单击重新加载不会重新提交表单.此外,如果您单击浏览器后退按钮,则不会出现"再次提交?"的提示.对话框.
这是一个JSP示例.
AJAX提交意味着不是将表单提交回传统意义上的服务器,而是使用表单数据创建一个返回服务器的AJAX请求.该提交做了它需要的东西.单击重新加载只会重新加载页面.它不会重新发送AJAX请求.
小智 5
它使用以下脚本工作。
<script>
if ( window.history.replaceState ) {
window.history.replaceState( null, null, window.location.href );
}
</script>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62550 次 |
| 最近记录: |