2

我正在通过 AJAX 加载页面,最近阅读了关于history.pushStateonpopstate.

我并没有真正了解 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 请求?

谢谢。

4

0 回答 0