php - 在 IE(和 Firefox)中处理后退按钮的最佳实践是什么

标签 php javascript xhtml

我在旧问题中知道这一点,但我无法找出处理后退按钮的最佳做法。

我正在编写一个在浏览器和后端服务器之间有大量数据移动的网络应用程序。我目前使用 post,当然当用户绕过应用程序导航并使用后退按钮时,IE 和 Firefox 都会弹出消息询问用户是否要重新发送数据。

我尝试了“get”,除了在 URL 中显示的所有数据之外,IE8 仍然会生成一条消息。

此外,我无法真正确定帖子何时会导致消息,何时不会,因为我有测试用例发布数据,其中后退按钮不会导致消息。

我的环境是 JavaScript、PHP 和 MySQL。

非常感谢任何帮助或指向研究位置的指示。

编辑:

我写了 3 个小页面来测试发布 a->b->c->a,它们不会导致任何 postdata 消息。我不知道为什么:

一个

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test post A</title>
</head>
<body>  
<h1>testPostA.php</h1>
<h3>Came from <?php print (isset($_POST['data'])?$_POST['data']:"NoWhere"); ?></h3>
<form action="testPostB.php" method="post">
    <input name="data" type="text" value="from testPostA.php" />
    <input type="Submit" value="Submit To: testPostB.php" />
</form>
</body>
</html>

B

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test post B</title>
</head>
<body>  
<h1>testPostB.php</h1>
<h3>Came from <?php print (isset($_POST['data'])?$_POST['data']:"No where"); ?></h3>
<form action="testPostC.php" method="post">
    <input name="data" type="text" value="from testPostB.php" />
    <input type="Submit" value="Submit To: testPostC.php" />
</form>
</body>
</html>

C

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test post C</title>
</head>
<body>  
<h1>testPostC.php</h1>
<h3>Came from <?php print (isset($_POST['data'])?$_POST['data']:"No where"); ?></h3>
<form action="testPostA.php" method="post">
    <input name="data" type="text" value="from testPostC.php" />
    <input type="Submit" value="Submit To: testPostA.php" />
</form>
</body>
</html>

最佳答案

Post/Redirect/Get模式将阻止重新发布警告。但是,您仍然需要注意您的应用程序可以处理/拒绝重复的表单提交等。

编辑 1

对于大量使用 Javascript 的应用程序,我还看到了一些利用 browser history 的设计模式和 fragment identifiers提供与后退按钮、书签等更无缝的集成。

编辑2

关于您问题的附录,很难说。可能是在某些情况下,浏览器缓存了页面,不需要重新提交 POST 来再次呈现页面。您可以尝试各种方法来禁用这些请求的浏览器缓存,看看您是否可以使行为更可预测(即总是导致重新提交警告)。无论如何,我认为遵循 Post/Redirect/Get 模式的 Web 应用程序对用户更友好一些,但你的里程可能会有所不同。

要记住的另一件事是,您可以在执行查询、生成报告等的表单上使用 method="get"。有时 GET 在那些只读场景中是更好的选择,因为它使您的 URL 方案更丰富并避免此类 POST 警告。

关于php - 在 IE(和 Firefox)中处理后退按钮的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772689/

相关文章:

javascript - 使用 NodeJS 执行托管 .JS 文件

css - 用 Logo 图像 : best method for SEO and accessibility? 替换 H1 文本

Phpunit:如何断言文件是图像?

php - 从 MySQL 表中获取下一个空闲 ID 的最短方法是什么?

javascript - PHP JSON 响应包括 HTML 布局

jquery - 查找和替换问题

xhtml - 使用 XDocument 通过 DTD 解析 XHTML

php - 什么更好 : Developing a Web project in MVC or N -Tier Architecture?

javascript - JS : Adding style dependent on class exist in siblings child

javascript - 我如何检测 View 是否在顶部位置