我有一个包含两个页面的网站:页面A带有表单和提交按钮;页面B显示基于页面A中的数据的计算结果。
我想用 POST 提交表单数据,这样我就不能使用 $.post 或其他任何东西;
我不能使用 document.location.replace('ULRPageB?param1=value1&...¶mN=valueN'),因为参数必须从查询字符串中隐藏。
但我必须确保,如果用户从页面 B 单击浏览器的 BACK 按钮,他会后退两页,而不仅仅是一页。
假设不能修改:换句话说,问题是:
存在一种方法来对servlet执行GET而不是AJAX,替换历史记录:是document.location.replace。
是否存在一种等效的方式来对替换历史记录的 servlet 执行 POST 而不是 AJAX?
有 Post/Redirect/Get 模式
- 浏览器使用 HTTP POST 提交表单。
- 服务器设置位置 HTTP 响应标头字段。
- 浏览器向位置 HTTP 响应标头字段中提到的页面发出 HTTP GET 请求
这使得后退按钮的行为更加用户友好,因为它不会返回到接受 POST 的页面(因此没有"POST 数据已过期"警告,也没有意外重复提交)。相反,后退按钮返回到显示表单的页面。
在此方案中,后退按钮在技术上返回两页。如果你想再往后退一页:不要这样做,它会让你的用户感到不安。