javascript - 修复加载更多分页样式时后退按钮问题

标签 javascript jquery ajax pagination infinite-scroll

HTML

<div class="moreButton">
        <a class="more" id="<?php echo htmlspecialchars($page);?>">More</a>
</div>

AJAX

$(function(){
    $('.more').live('click', function(){
        var page = $(this).attr('id');      //get the last id

        $.ajax({
            type    : 'GET',
            url     : 'functionality/js/paginate.php',
            data    : { page : page, per_page : per_page, last_page : last_page },
            beforeSend: function(){
                $('.more').html(img);
                if(history.pushState){
                   history.pushState(null, null, '#' + page);
                }else{
                   location.hash = '#' + page;
                }
            },
            success: function(data){
                $('.more').remove();
                $('.main-content').append(data);
            }
        });
    });
});

我实现了 load_more 样式的分页。这里的问题是无限滚动的常见问题,当用户单击帖子并使用后退按钮返回时,他/她应该获得之前加载的帖子数量,但仅加载初始帖子。我正在尝试根据我在谷歌搜索中发现的内容集成 history.pushState 功能,但似乎无法正常工作。我在这里缺少什么?

最佳答案

使用浏览器历史记录保存状态有两个关键部分。 pushState 函数允许您添加到历史堆栈(本质上就像进入新页面)。它还允许您将 javascript 对象存储为“状态”。当状态从堆栈中“弹出”时(例如按下浏览器的“后退”按钮),这将派上用场。

浏览器会抛出一个 popstate 事件,您可以使用该事件来确定浏览器是否要返回到之前的状态。您可以通过 window.onpopstate 访问它。要监视哈希更改,您可以使用 window.onhashchange .

if ("onpopstate" in window) {
    window.onpopstate = function (event) {
        if (event.state && event.state.pageID) {
            fetchData(event.state.pageID);
        }
    };
}

if ("onhashchange" in window) {
    window.onhashchange = function () {
        if (location.hash) {
            fetchData(location.hash.substr(1));
        }
    };
}

function fetchData(pageID) {
    // Load some content
}

function saveState(pageID) {
    if (history.pushState) {
        history.pushState({ pageID: pageID }, null, "/page/" + pageID);
    } else {
        location.hash = pageID;
    }
}

关于javascript - 修复加载更多分页样式时后退按钮问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242790/

相关文章:

javascript - jQuery/JavaScript - 将变量传递给函数

javascript - JQuery 仅附加 div 开始标记

javascript - 路线更改后滚动到顶部(嵌套 div)

javascript - 在 ui-view 中使用 ng-repeat

javascript - React fetch在同一数组下发布多个值

javascript - 使用 jQuery 加载图像?

javascript - 无法访问 typescript 中的全局变量

php - 给出警告 : mysql_fetch_array() expects parameter 1 to be resource, null。

javascript - Stripe Payment Element 加载时间慢

javascript - 使用 columnToggler 获取 toggleEvent 中的列组件对象