2

现在,当用户单击我网站上的链接时,我使用 ajax 仅替换主框架中的内容(标题和侧边栏需要跨页面保持状态,所以我不想重新加载它们)。我使用 pushState 和 popState 来更改 url 栏。

我明确不缓存 ajax 内容并且我的网站运行良好——但感觉有点太慢了,尤其是在“返回”命令上。

如果我确实缓存了 xhr html 请求,那么该站点在内部运行良好。但是,如果用户输入新的 URL 并离开站点,如果他/她点击“返回”命令,则只会从缓存中提取无样式、标题和无侧边栏的主视图内容,并且站点将不会t 正确显示。

如果用户离开页面,我有什么办法可以在内部进行缓存但刷新缓存?

4

1 回答 1

1

我想我现在明白你的描述了。

当我访问您网站上的 /page1.html 时,下载的 HTML 包含主要内容 + 标题 + 侧边栏。当我单击链接访问 /page2.html 时,AJAX 会加载页面并且下载的 HTML 仅包含主要内容。

因此,此时缓存包含完整的 /page1.html 和部分 /page2.html

现在,当我离开您的站点然后使用返回按钮返回时,浏览器会从缓存中获取 /page2.html。但这只是部分页面,您的网站会“中断”。

理想情况下,您希望浏览器仅在使用 XMLHttpRequest 请求时才获取部分内容。此外,如果部分页面和完整页面都可以缓存,那就太好了。

pjax_pjax=true通过将参数附加到 AJAX 请求中的 URL 查询来解决此问题。我认为这应该只适用于大多数情况。

请注意,不要将此参数添加到传递给的 URL 中pushState()

另一种方法是始终下载整个页面,然后#main-view在使用 AJAX 时提取。

当然,您可以通过切换到 PJAX 来解决其他人的问题(您需要使用该fragment选项)。

另一个为您处理 pushState() 的 JS 库是我的HTMLDecor项目。使用 HTMLDecor,您的页面只包含主要内容 +<link>到另一个(可能是共享的)包含页眉/页脚/侧边栏的 HTML 页面。HTMLDecor 从浏览器中将这些添加到页面中。当用户单击链接浏览到另一个页面时,HTMLDecor 使用 AJAX 和 pushState - 无需配置。当然,如果浏览器不支持 pushState,那么就会发生正常的链接导航。

于 2012-04-06T11:54:51.800 回答