如何在用户离开页面时“解除缓存”ajax加载的html

时间:2012-04-06 01:41:02

标签: javascript jquery html ajax

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

我明确地不缓存ajax内容并且我的网站工作正常 - 但感觉有点太慢了,特别是在'后退'命令上。

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

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

1 个答案:

答案 0 :(得分:1)

我想我现在理解你的描述了。

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

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

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

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

pjax通过在AJAX请求中向URL查询附加_pjax=true param来解决此问题。我认为这应该适用于大多数情况。

请注意,您不会将此参数添加到传递给pushState()的网址中。

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

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

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