browser-history - 使用 post-redirect-get 的自我更新表单的历史记录被破坏
问题描述
我有一个 URL /books
,它列出了一些书籍,以及一个 URL 模式/books/{some-book-title}
,它显示了书籍元数据的查看/更新表单。这是一个典型的用户故事,其中用户更正了不正确的作者条目:
GET /books
<a href="/books/ulysses">Ulysses</a>
<a href="/books/don-quixote">Don Quixote</a>
GET /books/ulysses
<form action="/books/ulysses" method="post" enctype="application/x-www-form-urlencoded">
<input name="author" value="Jamessss Joycessss">
</form>
POST /books/ulysses FORMDATA author=James+Joyce
Redirect 303 SEE OTHER location = /books/ulysses
GET /books/ulysses
<form action="/books/ulysses" method="post" enctype="application/x-www-form-urlencoded">
<input name="author" value="James Joyce">
</form>
问题是历史堆栈现在是
/books
/books/ulysses
/books/ulysses
这样当用户按下“返回”时,他们不会返回/books
,他们只是刷新当前页面。是否有一种非 JavaScript 方法来处理更新案例,以便后退按钮具有预期的行为?如果没有,解决这个问题的javascript方法是什么?
编辑:如果您多次发帖,那就更令人困惑了
GET /books
GET /books/ulysses author=Jamesss Joycesss
POST author=3 -> redirect shows author=3
POST author=2 -> redirect shows author=2
POST author=1 -> redirect shows author=1
Press back button /books/ulysses shows author=1
Press back button /books/ulysses shows author=2 (!!!)
Press back button /books/ulysses shows author=3 (!!!)
Press back button /books
解决方案
修改后退按钮行为的 JavaScript 方法是使用历史API
这是转到历史堆栈中第一页的快速方法。只需为后退按钮添加一个事件侦听器并使用历史 API。
window.history.go(0);
看看 API:https ://developer.mozilla.org/en-US/docs/Web/API/History_API
推荐阅读
- php - 尝试从静态页面发送电子邮件时出现错误 405
- eclipse - 如何在 Eclipse 中编码字符串?
- reactjs - React 无法识别导入的数组
- bitbucket - 提交拉取请求时完成的 Pytest + 覆盖回归测试(天蓝色管道和 bitbucket)
- gatsby - Gatsby 构建因 promise 失败。finally 不是函数
- c# - 如何检测用户是否单击控制台应用程序右上角的“X”按钮(C# .net)
- html - 无法将按钮向右移动并扩展输入以填充空间
- python - 给定一些约束,对等腰三角形的两个剩余顶点进行采样
- laravel - Laravel - 邮递员返回错误 500 内部服务器错误
- python - 如何阻止 bazel 依赖 Python2