javascript - AJAX 加载和 history.pushState 的推荐顺序是什么?

标签 javascript browser-history

例如,在 jQuery 中,设置一个链接以将某些内容加载到区域中,我应该在调用 history.pushState 之前加载内容吗?

$('#link').click(function () {
    $('#region').load('regionContent', function () {
        history.pushState(null, null, 'newUrl');
    });
    return false;
});

还是调用 history.pushState 后加载内容?

$('#link').click(function () {
    history.pushState(null, null, 'newUrl');
    $('#region').load('regionContent');
    return false;
});

前者对我来说似乎更可取,因为我觉得在内容改变之前 URL 不应该改变,但我更经常看到后者(例如 https://github.com/blog/760-the-tree-slider ),所以我想知道哪个被认为是最佳实践.

最佳答案

对于您的两个示例,当用户点击后退按钮时,内容不会改变!因为您的状态更改处理程序中没有任何内容。

基本上你会想要这样做:

$('#link').click(function () {
    History.pushState(null,null,'newUrl');
});
$('body').bind('statechange',function(){
    $('#content').load(History.getState().url);
});

当您点击一个链接时,您的页面状态将发生变化,并且如果您的页面状态已发生变化,它将加载新内容。点击浏览器中的后退按钮,也会导致状态发生变化,从而加载新内容。

现在我在这里使用了History.jsstatechangeHistory.getState().url 而不是原生的 popstateState.url 不同浏览器将在不同时间触发状态更改事件。 例如,safari 将在页面加载时触发状态更改事件,而 chrome 和 firefox 则不会 - 导致在 safari 中您的内容加载两次。 History.js 为所有浏览器提供一致的 API,如果您甚至希望 HTML4 浏览器回退到哈希。

关于javascript - AJAX 加载和 history.pushState 的推荐顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701642/

相关文章:

javascript - mouse moveX 如何处理拖动事件?

javascript - 在 JQuery 中加载时闪烁的图像

javascript - Backbone.history.start() 阻止后退按钮离开页面

带有哈希标签的javascript重定向

reactjs - 更改滚动reactjs中的路线

javascript - 当历史返回时处理js执行

javascript - 类型错误 : $. mainBowerFiles 不是一个函数

javascript - 如何使用纯javascript在静态页面中制作无限页面滚动效果

javascript - 粘贴到内容可编辑的 DOM 元素时去除标签

javascript - 如何删除通过 history.pushstate 添加的历史条目?