我有一个表单。在成功提交后,会进行服务器端重定向以查看新条目。
问题:当用户点击后退按钮时,所有输入仍然填充有上一次的值(它不会自动重新提交表单或显示“确认表单提交”提示)。这使得用户可以手动再次单击“提交”,并非常容易地提交重复条目,这是我想要避免的。请注意,这不是经典的“重新发布”问题,我们正在使用POST/重定向/GET模式。
表单中有20多个字段,从技术角度讲,可能存在两个相同的条目是合法的,但我只希望在用户按下后退按钮时清除字段。
这是我尝试过的:
禁用缓存头信息
提交表单后的“刷新”重定向
问题:当用户点击后退按钮时,所有输入仍然填充有上一次的值(它不会自动重新提交表单或显示“确认表单提交”提示)。这使得用户可以手动再次单击“提交”,并非常容易地提交重复条目,这是我想要避免的。请注意,这不是经典的“重新发布”问题,我们正在使用POST/重定向/GET模式。
表单中有20多个字段,从技术角度讲,可能存在两个相同的条目是合法的,但我只希望在用户按下后退按钮时清除字段。
这是我尝试过的:
禁用缓存头信息
header('Cache-Control: must-revalidate, no-store, no-cache, private, max-age=0');
header('Pragma: no-cache');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
无缓存元标记的组合
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
Submitting and redirecting with javascript
$('form').submit(function(){
$.post($(this).attr('action'), $(this).serialize(), function(response){
window.location = response.redirectUrl;
});
});
提交表单后的“刷新”重定向
header('refresh:0; url=view_entry');
由会话数据触发的刷新
// psuedo PHP code for the "add" page
if ($_SESSION['submit']) {
$_SESSION['submit'] = 0;
redirect(current_url); // Cross fingers and hope this clears the form
}
if ($formValid and $saveEntry) {
$_SESSION['submit'] = 1;
redirect(next_url);
}
所有方法都无效,点击后退按钮后表单字段仍然被填充。最后一个选项实际上会触发“确认表单提交”的提示,这不是我想要的,但至少好了一点。
我应该提到这是在Google Chrome中。如果有Codeigniter和jQuery可用,我只想在用户成功提交后,点击后退按钮时清除表单字段。我实际上不记得以前有过这个问题,而且我已经没有任何想法了。什么是正确的做法?