我正在尝试使这个无限滚动脚本按照我想要的方式工作。但是我无法弄清楚,如何检测 loadmore.php 文件中哪些帖子是新的,因此它不会显示页面上已有的帖子?
<script type="text/javascript">
$(window).scroll(function()
{
if($(window).scrollTop() == $(document).height() - $(window).height())
{
$('div#loadmoreajaxloader').show();
$.ajax({
url: "loadmore.php",
success: function(html)
{
if(html)
{
$("#postswrapper").append(html);
$('div#loadmoreajaxloader').hide();
}else
{
$('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
}
}
});
}
});
</script>
不要试图"弄清楚"哪些帖子是新的。确保在你的javascript中你知道上次加载的帖子(通过它的id或其他方式),并将其发送到'loadmore.php"脚本。
你的Web服务(loadmore.php)应该保持无状态,你的前端(javascript)应该知道状态(上次加载的id)。
好吧,简单地说:你必须存储这些信息。猜测您尝试加载的信息中有一些序列,您可以存储上次返回的 id ,并将该信息作为 PHP 脚本中新信息的起点传递。
为什么不在客户端上创建一个变量,其中包含您尝试加载的元素列表的最后一个 ID 或最后一个时间戳。 然后你只需将此值传递给服务器,您的 PHP 文件就可以使用此值。
一个非常常见的例子是上次拍摄的时间戳。 当您需要一些新的提要时,您只需将此时间戳发送到服务器,他就会获取例如接下来的 5 个提要,这些提要比这次更旧
执行此操作
的最佳方法是创建一个可以向其提供偏移量的页面,它将查询新帖子。这就是我在wordpress中这样做的方式:
- 确保为页面提供偏移量 (url):http://yourwebsite.com/more/?offset=20
- 然后获取偏移量并使用偏移量运行查询。
- 那么你就不会有任何相同的结果...
我知道这听起来很模糊 - 所以我用代码写了一个教程 - 想看看吗? http://benjaminpotter.org/infinite-scroll/