【问题标题】:History.js with Ajax Server ResponseHistory.js 与 Ajax 服务器响应
【发布时间】:2023-03-08 00:34:01
【问题描述】:

我在使用 history.js 时遇到了一点问题。

我尝试使用 history.js + ajax 和 dojotoolkit 来实现类似 github 的源浏览器。

它可以工作,但我在服务器端遇到了一个小问题

我使用php,当某个页面加载history.js pushState时,服务器会首先检查请求类型,“是ajax吗?”。如果是ajax,则服务器只返回页面的请求部分,如果不是,服务器将返回整页。

问题是,如果我关闭浏览器,然后重新打开它,页面将只显示服务器返回的 ajax 页面,而不是完整页面,因为它仍然被称为 ajax 请求。

我该如何解决这个问题?

【问题讨论】:

  • 服务器怎么知道是ajax请求?重新打开浏览器后,服务器应该只有地址字段中的 url。常见的做法是检查标头 X-REQUESTED-WITH 的值“xmlhttprequest” - 如果这是服务器正在执行的操作,那么您应该没有问题。

标签: php ajax history.js


【解决方案1】:

我遇到了完全相同的问题,并花了一些时间研究它。结果是,当您从历史记录中恢复选项卡或从其他页面返回页面时,原始页面通常会从浏览器缓存中恢复(最初我认为它向服务器发出完全相同的请求,包括标题)。

如果您对 URL 的最后一次请求是 AJAX 并且状态已被推送,则 AJAX 响应将被缓存在浏览器中 - 稍后会向您显示缓存的响应。

解决方案是通过发送正确的标头来禁用 AJAX 请求的缓存。这是我在 PHP 中使用的,以确保没有浏览器会缓存我的响应:

header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2015-02-12
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2015-04-17
    • 2019-04-11
    相关资源
    最近更新 更多