我目前正面临HTTP post表单和历史pushstate的一个小问题 .
当我的用户在 example.com/page-1
中提交POST表单然后单击此页面中的链接时,会使用history.pushstate将其重定向到 example.com/page-2
. JS脚本只是更改当前URL,将旧的推送到历史记录,然后显示新内容 . 这对我来说非常好 .
问题:一旦用户在 example.com/page-2
上并手动刷新页面(ctrl r或刷新按钮),Chromes会提示用户再次提交表单;但表格实际上是 example.com/page-1
,并且没有理由在"new"页面再次询问 .
有没有办法在popstate更改中清除javascript中所有以前提交的数据,以防止从浏览器重新发送提示?或者我错过了我的历史状态?或者它目前还没有被浏览器实现?
我只用chrome测试它,因为我没有用其他浏览器实现pushstate .
2 回答
也许尝试替换replaceState?见this .
我有一个相同的问题 - 我正在使用历史API与BackboneJS .
我想到的解决方案是在登录后有一个表单重定向到的中间页面 . 此中间页面的目的是在目标页面之前添加一个非POST页面,以便浏览器不会提示重新提交表单(以及Chrome不添加冗余条目) .
对于您的示例,在
example.com/page-1
中提交POST表单后,服务器应将用户重定向到example.com/page-1a
example.com/page-1a
可以验证用户凭据是否存在,然后重定向到example.com/page-2
. 我相信这会解决你的问题 .对于重定向机制,我可以想到3个选项:
服务器端重定向
JavaScript(
location.href="page-2"
)HTML Headers (
<meta http-equiv="refresh" content="0; URL='http://example.com/page-2'" />
)我个人尝试过选项1和2 - 它们对我来说很好 . 希望这可以帮助!