我正在通过 AJAX 加载页面,最近阅读了关于history.pushState
和onpopstate
.
我并没有真正了解 state 对象参数的全部内容pushState
,并且 MDN 上的页面仅给出了一个简单的对象作为示例。但是我想,嘿,我为什么不使用这个对象来存储 AJAX 响应 HTML 并在onpopstate
触发时加载它呢?所以我正在做这样的事情:
在 XHR 状态 200/304(AJAX 成功)上:
if (history.pushState) {
var state = {
html: xhr.responseText
};
history.pushState(state, null, url);
}
弹出状态:
window.onpopstate = function(event) {
if(event && event.state) {
someDivInTheDoc.innerHTML = event.state.html;
} else {
location.reload();
}
};
当然,这会加载可能已经更新的(旧)内容,这与您返回并获取浏览器缓存时类似,我猜。
在 MDN,它说该对象在其 JSON 表示中最多可以容纳 640k 个字符。
那么,状态对象是否意味着这样的事情?或者我应该在历史移动位置时再次强制重新加载/执行 AJAX 请求?
谢谢。