3

我在页面中有一个简单的表单。表单正在提交到同一页面。表单提交后,当我单击浏览器刷新按钮时,它会要求重新发送表单,当我单击重新发送时,它会再次提交表单。

我的代码或其正常的浏览器行为有什么问题吗?

有什么办法可以防止这种情况。。

4

5 回答 5

4

这是浏览器的正常行为。您可以通过在提交当前表单后重定向到其他页面来防止这种情况。

常见的解决方案是在执行 POST 请求后向 GET 请求发送重定向。这样,客户端最终将在浏览器视图中获得 GET 请求。刷新它只会重新执行不(不应该)修改任何内容的 GET 请求。

于 2013-10-31T10:21:59.407 回答
1

那是正常的行为。防止使用另一个页面提交并重定向回表单。

于 2013-10-31T09:51:59.937 回答
0

是正常行为。当您提交表单时,即使是到同一页面,浏览器也会发出请求。刷新按钮发送相同的请求。因此多次提交。

不......你不能做任何事情,除了也许ajax提交表单。

于 2013-10-31T09:52:42.693 回答
0

这是浏览器的正常行为,如果它检测到 POST 请求并且您刷新页面,您的浏览器会自动询问您是否需要再次发送请求。为了防止这种情况..好吧..您可以简单地重定向到另一个页面,或者仔细检查服务器端的表单提交(看看是否没有双重)

于 2013-10-31T09:52:58.603 回答
0

这是一种正常行为,但您可以在处理结束时添加重定向到同一页面而无需 POST:

<?php
// set to true to display a waiting message "Thanks you, you will be redirected in 5 sec."
$wait_before_refresh = false;
if (isset($_POST['myButton']))
{
  // process to your checks, do whatever you want
  // ...
  if ($wait_before_refresh)
  { 
    $html_redirect = <<<HTML_REDIR
<!DOCTYPE html>
<html><head><title>Thanks you !</title>
<meta http-equiv="refresh" content="5;URL='/'" />
</head>
<body>Thanks you, you will be redirected in 5 sec.</body></html>
HTML_REDIR;
    echo $html_redirect;
  }
  else
  {
    header('Location : /');
    exit;
  }
}
?>
<form method="POST" action="/"><input type="submit" name="myButton" value="clicked" /></form>
于 2013-10-31T10:06:53.640 回答