【问题标题】:Ajax + pushState bug in ChromeChrome 中的 Ajax + pushState 错误
【发布时间】:2012-06-19 00:34:53
【问题描述】:

我在 Chrome 19 中遇到了一个奇怪的错误。我实现了一个支持 pushState 的完整 AJAX 网站(每个非外部链接都通过 AJAX 请求打开)。我通过 JSON 格式以 AJAX 传输 HTML sn-ps。

当我通过外部链接离开我的网站然后返回时,Chrome 会为该 URL 呈现缓存数据 - 问题是,他缓存 JSON 内容并显示该内容,而不是完整的网页。

这可以通过这些步骤重现(更新:从那时起我在我的网站上删除了 AJAX 功能,所以这个错误不再出现):

  1. 打开http://beta.mirtes.cz/
  2. 单击第二个日期链接(16. 6. 2012 旁边的“这一切都始于一封奇怪的电子邮件”)。此页面(您现在位于 http://beta.mirtes.cz/it-all-began-with-a-strange-e-mail)是通过 AJAX 加载的。
  3. 单击“这一切都始于一封奇怪的电子邮件”。您被重定向到外部网站。
  4. 页面加载完成后点击Chrome中的“返回”。

我尝试使用 Cache-Control: no-cache 发送所有 AJAX 响应,但没有任何效果。

Firefox 12 工作正常。

【问题讨论】:

    标签: ajax html google-chrome


    【解决方案1】:

    我提供了一个解决方法 - 我使用附加的虚拟 GET 参数执行 AJAX 请求 - ?ajax=1。通过这种方式,浏览器可以识别通常的 HTML 内容和 JSON 之间的区别。对用户没有任何影响,该参数只在Firebug中可见。

    【讨论】:

    • 你能解释一下你做了什么以及它是如何解决问题的吗?
    • 我正在使用附加的 GET 参数发出所有 AJAX 请求 - 在本例中,ajax=1。此参数对用户不可见,因为它仅在后台执行。
    • 这样,浏览器可以知道完整的 HTML 内容和 JSON AJAX 内容之间的区别,因为 URL 不同。因此,它不会在不应该显示缓存的 JSON 内容的地方显示。你可以在我的主页ondrej.mirtes.cz查看功能。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 2012-04-03
    • 1970-01-01
    相关资源
    最近更新 更多