History.js - 更新初始状态(在推送另一个状态之前首先加载的页面)

时间:2015-05-01 15:26:44

标签: javascript ajax pushstate history.js

抱歉我的英语不好:(

我尝试了History.js它对我有用,我可以在使用后退/前进浏览器按钮时推送新状态并更新内容但我对初始状态有疑问。

首先,当第一页被调用时,我替换状态,将其初始化为:

History.replaceState({state: initialDataToStore}, document.title, document.location.href);

当我点击一个链接时,我推送一个状态,然后使用像这样的ajax请求更新 div #content

$('body').on('click', '.js-nav',function(event) {
    var url = $(this).prop('href');
    History.pushState(state, 'title', url);
    loadContent(state, url);
    event.preventDefault();
});

当我使用后退/前进按钮时,' statechange' 事件被触发,因此我调用loadContent函数来更新 div #content 像这样:

History.Adapter.bind(window,'statechange',function(){ 
    var State = History.getState(); 
    url = State.url;
    loadContent(State.data, url);
});

loadContent 功能:

function loadContent(state, url){
    $.ajax({
        url: url,
        type: 'GET'
    })
    .done(function(data) {
        $('#content').empty().append(data);
    })
    .fail(function() {
        console.log("error");
    });
}

我遇到第一个已加载页面的问题,如果浏览器历史记录中已有上一个元素,如下所示:

1- new tab or another page
2- first loaded page (that i force the replaceState)
3- ...

如果我使用浏览器后退按钮返回"新标签页或其他页面" ,则点击前进按钮> "首次加载页面" ,我丢失了所有html "布局" (html,脚本,头部,正文...) ,只显示ajax响应(要附加到 div #content 的内容)。

P.S: 如果我在历史记录"首次加载的页面" "新标签或其他页面" >工作正常,我不会丢失Html布局。

我该怎么做?

由于

0 个答案:

没有答案