【问题标题】:Problems with history.js back buttonhistory.js 后退按钮的问题
【发布时间】:2013-02-07 14:44:54
【问题描述】:

我正在使用 history.js 来更新我的网站,效果很好。它是一个基于 PHP 的网上商店,如果它检测到 ajax 请求,则只提供带有主 div 数据的 JSON:

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) 
    && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {}

在加载时,我对链接进行 ajaxify,这是一种取自 history.js 的 github 的方法:https://github.com/browserstate/History.js/

function ajaxify() {
var History = window.History;
$('a[rel="ajax"]').click(function(e){
    if(History.enabled) {
        e.preventDefault();
        var url = $(this).attr("href");
        var options = {};
        History.pushState(null, 'Shop', url);
    }
    else {
        window.location.replace(url);
    }
});
}

这是事件处理程序:

History.Adapter.bind(window,'statechange',function(){
    var State = History.getState();
    var returnLocation = history.location || document.location;
    var url = returnLocation.pathname;
    var options = searchString(returnLocation.search);
    shopUpdate(url,options)
});

这是 ajax 调用:

function shopUpdate(url,options) {
     $.ajax({
        url: url,
        type: "GET",
        dataType:'json',
        data: options,
        success: function(data, textStatus, jqXHR){
            $('#shop').html(data.page);
            ajaxify();  
        }
    });
}

有一种情况会破坏一切:一些链接不是“ajaxified”,当我点击几个 ajax 链接,然后是“常规”链接,然后“返回”时,我得到原始 JSON 输出。网址是正确的,当我重新加载时,我得到了我想要的页面。就像 PHP 认为它是 Ajax 并提供 JSON 一样,但由于我通过常规链接到达那里,因此 History statechange 没有触发。我很困惑,感谢任何帮助!

谢谢, 托马斯

【问题讨论】:

    标签: php ajax history.js


    【解决方案1】:

    原来这是 Chrome、后退按钮和缓存的问题。我在 JSON Header 中添加了Cache-Control: no-store,现在它可以工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2011-01-15
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多