2

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

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

它有效,但我在服务器端遇到了一个小问题

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

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

我怎么解决这个问题?

4

1 回答 1

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");
于 2012-08-16T18:03:30.073 回答