无尽的分页帮助Jquery / PHP

时间:2011-11-18 17:51:09

标签: php jquery mysql pagination

我正在尝试编写无尽的分页并遇到麻烦

$(document).ready(function(){

        function lastPostFunc() 
        { 
            $('div#lastPostsLoader').html('<div class="load"><div class="label"><font color="black"><b>Loading more...</b></font></div></div>');
            $.post("cr/sc/scr.php?lastID="+$(".comment:last").attr("id"),

            function(data){
                if (data != "") {
                $(".comment:last").after(data);         
                }
                $('div#lastPostsLoader').empty();

            });
        };  

        $(window).scroll(function(){
            if  ($(window).scrollTop() == $(document).height() - $(window).height()){

               lastPostFunc();
            }
        }); 

    });

这里是我的PHP

    $result = mysql_query('SELECT * FROM xyz ORDER BY sy DESC LIMIT 15');

            while($row = mysql_fetch_object($result)) {
                $i++;
                                        echo "<div class='comment' id='" . $i. "'>"; 
                }

和其他抓取数据的页面

$ pg = $ _GET [&#39; lastID&#39;];

$ I = $皮克;             $ result = mysql_query(&#39; SELECT * FROM xyz ORDER BY sy DESC LIMIT&#39;。$ pg。&#39;,15&#39;);

            while($row = mysql_fetch_object($result)) {
                $i++;
                            echo "<div class='comment' id='" . $i . "'>"; 
}

我在获得评论价值方面遇到了问题:最后

我得到15条评论值:在第一次加载事件后持续

我得到15条评论值:在第二次加载事件后持续

这是我期待30的问题

并且在第3次事件发生时它给出30

和同样的过程再次30,30,40,40,50,50

而不是30,40,50,60,70,80

我试过jquery live(),我使用$ _GET导致我从URL

获取

1 个答案:

答案 0 :(得分:0)

检查你是否在其他地方加载这个函数,因为函数在我的上面加载和停止,并且我可以让它模仿你所说的唯一方法,如果我在页面加载时再次加载函数,这将是同时创建两个调用。导致1-15和1-15以及页面上的最后一个数字。然后在滚动时,它按照预期加载函数并继续加载,就像你说的那样。

另外,请确保您正在检查直接进入数据库的内容(或者即使您使用帖子)。那就是要求注射。

编辑:如果您有数据,您应该首先加载整页(和过去)。然后加载滚动功能,如果页面未满,则不会加载。这就是为什么它停止了我。

EDIT2 :这是我想要查看时使用的代码。我创建了一个模拟数据库,所以我没有必要匹配db来测试。

<?php
$scroller = 30;

if ( isset($_GET['hold']) && $_GET['hold'] == '1' ) {
    $i = isset($_GET['lastID'])?(int)$_GET['lastID']:0;
    $j = $i + $scroller;
    //sleep(10);
    while( $i < $j ) { // mimic a mysql call and spit it out.
        ++$i;
        echo "<div class='comment' id='${i}'>${i}</div>"; 
    }
    exit;
}
?>
<html>
<head>
<script src="jquery-1.7.min.js" type="text/javascript"></script>

<script type="text/javascript">    
// I was doing something else with this, but stripped out the code
var scroller = <?php echo $scroller;?>;
$(document).ready(function(){
    function lastPostFunc() 
    {
        // this assumes there are already comments on the page, so put a dummy comment
        var last = $(".comment:last").attr("id");

        $('div#lastPostsLoader').html('<div class="load"><div class="label"><font color="black"><b>Loading more...</b></font></div></div>');
        $.post("<?php echo $_SERVER['PHP_SELF']; ?>?hold=1&lastID="+last,

        function(data){
            if ( data != "" ) {
                $(".comment:last").after(data);         
            }
            $('div#lastPostsLoader').empty();
        });
    };  

    $(window).scroll(function(){
        if  ($(window).scrollTop() == $(document).height() - $(window).height()){
           lastPostFunc();
        }
    });
    lastPostFunc();
});
</script>
</head>
<body>

<div class="comment_container">
    <div class="comment" id="0"></div>
    <div id="lastPostsLoader"></div>
</div>

</body>
</html>