伙计们,我有一个 Web 应用程序,我在其中对同一资源的 JSON 和 HTML 表示重新使用了相同的路由,现在我们称之为 /foo/details。此页面链接自,我们称其为 /bar/details。(因此,查看 /bar/details 您会看到指向 -> /foo/details 的链接)。
当我从第一页转到第二页时,一切正常。当我在 Chrome 中单击后退按钮时,原始页面呈现为 JSON 而不是 HTML。如果我在浏览器中点击刷新,我会得到 HTML 表示而不是 JSON。
这是我用来检测 JSON 与 HTML 的代码:
res.result.map { group =>
render {
case Accepts.Html() => Ok(views.html.groups.details(group))
case Accepts.Json() => Ok(Json.toJson(group))
}
}.getOrElse(NotFound)
这是此模式的标准实现,它适用于任何地方,除非我在某些情况下使用 Chrome 中的后退按钮。
是否有一些我没有清除的值,或者我的页面使用 Ajax 所做的事情让 Play 混淆以使其在 Json 中呈现,或者 Chrome 正在缓存页面但缓存了错误的接受标头?
我可以通过使用两种不同的路线来解决这个问题,一种用于 Json,另一种用于 Html,但我不喜欢这样,因为感觉就像我要放弃了。
有人对仅在后退按钮中导致此行为的原因有任何想法吗?