如何'取消缓存'当用户离开页面时,ajax加载了html
How to 'un-cache' ajax-loaded html when user leaves page
现在,当用户点击我网站上的链接时,我使用ajax只替换主框架中的内容(标题和侧边栏需要保持页面之间的状态,所以我不想重新加载它们)。我使用pushState和popState来更改url栏。
我明确地不缓存ajax内容,我的网站运行良好——但感觉有点太慢了,尤其是在"back"命令上。
如果我缓存了xhr-html请求,那么该网站内部运行良好。但是,如果用户输入一个新的URL并离开网站,如果他/她点击"返回"命令,则只会从缓存中提取未格式化的、没有标题和侧栏的主视图内容,网站将无法正常显示。
有没有什么方法可以让我在内部进行缓存,但在用户离开页面时刷新缓存?
我想我现在明白你的描述了。
当我在你的网站上访问/page1.html时,下载的html有主内容+标题+侧边栏。当我点击链接访问/page2.html时,AJAX加载页面,下载的html只有主要内容。
因此,此时缓存包含一个完整的/page1.html和一个部分的/page2.html
现在,当我离开你的网站,然后点击后退按钮返回时,浏览器会从缓存中抓取/page2.html。但这只是一个部分页面,你的网站"崩溃"了。
理想情况下,您希望浏览器只在使用XMLHttpRequest请求时获取部分内容。此外,如果部分页面和完整页面都可以缓存,那就太好了。
pjax通过向AJAX请求中的URL查询添加_pjax=true
参数来解决这个问题。我认为这应该在大多数情况下都有效。
请注意,您不会将此参数添加到传递给pushState()
的URL中。
另一种选择是始终下载完整页面,然后在使用AJAX时提取#main-view
。
当然,您可以通过切换到PJAX来解决其他人的问题(您需要使用fragment
选项)。
另一个为您处理pushState()的JS库是我的HTMLDecor项目。使用HTMLDecor,您的页面只包含主要内容+一个<link>
到另一个(可能是共享的)包含页眉/页脚/侧边栏的HTML页面。HTMLDecor从浏览器中将这些内容添加到页面中。当用户点击链接浏览到另一个页面时,HTMLDecor使用AJAX和pushState,无需配置。当然,如果浏览器不支持pushState,则会出现正常的链接导航。
- php函数的ajax html$_POST值返回null
- ajax html javascript页面刷新无闪烁问题
- Ajax html document I18n
- "r 〃;在jquery-ajax-html的警报中
- 在ajax html返回中调用ajax会阻止第一个ajax脚本进一步工作
- 使用AJAX html()加载Django模板导致不需要的文本
- PDF 文件上传 AJAX HTML
- Jquery ajax html replace
- AJAX HTML 函数未获取文本区域值
- jquery ajax html 与 Google Chrome 和 Firefox 的问题
- ajax ,html and javascript
- 函数在jQuery ajax html注入后不起作用
- 等待ultil-ajax.html成功加载对象
- 将AJAX HTML响应读取到JavaScript数组中
- ajax HTML内容未在bootstrap pop中呈现
- 将当前页面数据存储在一个变量中,其格式/结构与Ajax html响应相同
- 解析AJAX HTML响应:我可以找到元素,但不能访问它们的innerHTML或值
- 加载页面并淡入或淡出ajax html
- AJAX HTML响应中的链接在被点击后会失去点击
- AJAX/HTML如何存储复杂的数据