我在本地测试应用程序中实现了History.js。 一切似乎都可以工作,但是如果我按浏览器的返回按钮,则不会恢复先前的内容。
当用户按下后退按钮时,我是否实际上需要手动再次加载内容(即进行另一个ajax调用)? 那么github是如何做到的呢? 我看到他们在代码树中单击后退按钮时不会进行另一个ajax调用。
这是我的代码:
History.Adapter.bind(window,'statechange',function()
{
var State = History.getState();
History.log(State.data, State.title, State.url);
});
$('a').each(function(index, link) {
if ($(link).attr('data-ajax-disabled') != 'true') {
$(link).click(function(event)
{
var clips = $(this).attr('data-ajax-clips') || '';
$.ajax($(this).attr('href'),
{
data: {_clips:clips},
success: function(data)
{
var data = $.parseJSON(data);
History.pushState({state:1}, data.title || document.title, 'http://127.0.0.1/site/www/');
$.each(data.clips, function(key, val)
{
$(key).replaceWith(val);
});
}
});
return false;
});
}
});
data.clips是一个JSON数组,其中包含HTML对象的id作为键和实际的HTML内容作为值。例如:
'#header' => 'header div中的内容'
如上所述,替换工作正常。我在头部输出了一个随机数。每次点击链接时,都会在标题中输出另一个随机数。然而,如果我点击浏览器的后退按钮,数字将保持不变,只有标题会被恢复(也是随机数)。
.hide()
在页面上隐藏它,或者将 HTML 存储在变量中,然后在需要时重新加载它。 - Tobias Cohen