【发布时间】:2012-02-12 14:19:05
【问题描述】:
我有一段 jquery 可以在我的博客上加载新帖子,问题是它运行了两次,这意味着帖子被重复了。我还想找到一种方法,让它在用户距离文档底部还有几个像素(比如 50 像素)时运行。 (图很简单)。
在调整代码之前,我在获得代码的网站上报告了该错误: http://blog.hycus.com/2011/03/15/infinite-scrolling-like-new-twitter-with-php-mysql-jquery
一条评论建议使用 .data() 但我不太确定它会如何工作。此代码是从一个单独的 js 文件运行的,正文中包含指向它的链接。 Firebug 报告了两个帖子请求,最终我的博客帖子显示了两次。
$(document).ready(function(){
$(window).scroll(function(){
if($(window).scrollTop() === $(document).height() - $(window).height()){
$('div#loadmoreajaxloader').show();
$.post("blog/loadmore", {pid: $(".blogpost:last").attr("id")}, function(html){
if(html){
$("#bloglist").append(html);
$('div#loadmoreajaxloader').hide();
}else{
$('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
}
});
};
});
});
我无法发布自己问题的答案...我解决了:
这似乎解决了我的问题,如果有人有更好的解决方法,请告诉我。
还尝试了一些方法来使页面加载在到达页面末尾之前发生(我认为 if ($(window).scrollTop()+50 === $(document).height() - $(window).height()) 可能会奏效)但它们不起作用。
var lid = $(".blogpost:last").attr("id");
$(document).ready(function() {
$(this).scrollTop(0);
$(window).scroll(function() {
if ($(window).scrollTop() === $(document).height() - $(window).height()) {
if(lid !== $(".blogpost:last").attr("id")){
$('div#loadmoreajaxloader').show();
$.post("blog/loadmore", {
pid: $(".blogpost:last").attr("id")
}, function(html) {
if (html) {
$("#bloglist").append(html);
$('div#loadmoreajaxloader').hide();
} else {
$('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
}
});
lid = $(".blogpost:last").attr("id");
}
};
});
});
【问题讨论】:
-
当我 made a demo 进行一些调整以使其在 JSFiddle 上运行时,我看不到重复的行。您确定您的服务器脚本输出的博客文章不超过一篇,但看起来 jQuery 触发了两次?
-
嗨,Jared,Firebug 正在显示两个帖子,它们收到相同的数据。我看不出服务器脚本会重复的任何原因。这个想法是当它到达页面底部时,它会拉出接下来的十个帖子。
-
这可能是由于第一次迭代没有足够快地移动页面,所以如果我继续滚动它使用相同的最后一个 id 运行,因为新的 id 尚未加载。有没有办法可以记录运行之间的最后一个 id,然后如果它相同则不运行帖子?