【发布时间】:2014-07-06 06:10:39
【问题描述】:
如何使用 pushState URL 缓存通过 ajax 加载的页面,从而避免从服务器重新加载页面?例如,
第 1 页:/foo.html。 单击按钮,发送 ajax 请求,获取响应并更新页面。 历史 pushState 作为新页面 /bar.html。
history.pushState({}, '','/bar.html');
此时,我们希望浏览器将当前页面缓存为/bar.html。
window.onpopstate = function(event) {
// browser is not loading page automatically for back/forward
if (event.state)
location.reload();
};
单击后退/前进按钮时,应从浏览器缓存中加载 /bar.html。但它再次从服务器加载。如何做到这一点?也就是让ajax更新的页面被当作普通的GET /bar.html,并被浏览器缓存。怎么样?
感谢您提供任何线索。 戴夫
【问题讨论】:
-
“如何实现这一点?” – 与实现它的方式相同,完全不涉及 AJAX 和 pushState。
-
如何告诉浏览器将其缓存为新 URL?谢谢。
-
当用户再次导航到该历史条目时,您只需再次发出 AJAX 请求 - 如果您已实施适当的缓存,则浏览器将从缓存中获取数据,而不是再次请求。跨度>
-
设置响应头缓存控制:max-age=86400。 Chrome/FireFox 浏览器不缓存它。 onpopstate: location.reload() 总是从服务器再次请求页面。
-
使用 History API 时,您必须处理用户来回导航时显示的内容,这是正确的。但是没有人通过 重新加载 页面来强迫您这样做……您已经使用 AJAX 来获取内容,然后将其放入 DOM 中,对吧?那么是什么阻止你再次完全这样做(从而利用浏览器的缓存,当它意识到,“嘿,我之前已经加载过该内容一次,所以我不必须在这里发出一个新的 HTTP 请求,但我可以通过从缓存中取出数据来回答该 AJAX 请求”)...?
标签: javascript ajax caching pushstate popstate