无限滚动一次加载所有项目?

时间:2012-11-16 23:54:12

标签: php javascript mysql json infinite-scroll

我正在使用一个名为autobrowse的脚本它代表一种无限滚动类型的脚本,它从JSON文件中提取数据。当我设置脚本重复(循环)项目几次时,它就像在demo example from the creator of the script中一样完美。这是通过在max中输入更高的值来完成的,就像它们在示例中设置为100一样从flickr json feed中提取数据。

但我不想重复我的结果,而是希望它们像每10或20个项目一样加载,并在加载json(数据库)的最后一项时停止。但是当我在脚本中设置“max:1”选项以便仅从JSON加载我的项目时,它会立即显示所有元素,无论它们有多少。没有任何无限滚动。

所以我想设置页面底部每个滚动应显示的项目数。比如10,例如。

这就是我生成JSON文件的方式:

<?php
$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");
mysql_select_db("dbase") or die("Could not select database");

$arr = array();

$rs = mysql_query("SELECT * FROM bannersright ORDER BY HdOrder");

while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}

echo '{"bannersright":'.json_encode($arr).'}';

?>

这就是我在视图文件中调用autobrowse脚本的方式:

   $(function () {

        $("#wrapper #sidebar-right").autobrowse(

            {

                url: function (offset)
                {                   
                    return "http://www.mysite.com/json.php";
                },
                template: function (response)
                {
                    var markup='';
                    for (var i=0; i<response.bannersleft.length; i++)
                    {
                        markup+='<a href="'+response.bannersleft[i].URL+'"><img src="'+response.bannersleft[i].Image+'" /></a>'
                    };
                    return markup;
                },
                itemsReturned: function (response) { return response.bannersleft.length; },
                offset: 0,
                max: 1,
                loader: '<div class="loader"></div>',
                useCache: false,
                expiration: 1
            }
        );

});

我认为它与偏移功能有关,但不知道如何实现这一点。他们在他们的网站上还有一个关于twitter的演示,这与此非常相似,但是他们像这样称呼json:

url: function (offset)
{
    return "http://twitter.com/status/user_timeline/ParisHilton.json?count=10&page=OFFSET&callback=?".replace(/OFFSET/, 1+Math.round(offset/10));
},

(他们的演示不再起作用的原因是因为Twitter改变了他们的json feed api)

从他们调用twitter feed的方式来看,我认为twitter可以选择在他们的API中设置页面。

所以我想我的最后一个问题是:你如何用JSON创建页面?我需要将什么PHP代码添加到我的json.php文件中才能从页面中拾取元素?

它不一定是json页面,如果你有其他解决方案,请分享它。

1 个答案:

答案 0 :(得分:3)

您忘记在mySQL请求和url生成器中设置LIMIT:

PHP

<?php
$link = mysql_pconnect("localhost", "user", "pass") or die("Could not connect");
mysql_select_db("dbase") or die("Could not select database");

//GET page/count
$count=10;$offset=0;
if (isset($_GET['count'])) $count=$_GET['count']*1;
if (isset($_GET['page']))  $offset=$_GET['page']*$count*1;

$arr = array();

$rs = mysql_query("SELECT * FROM bannersright 
                   ORDER BY HdOrder 
                   LIMIT $offset,$count"); #<-HERE

while($obj = mysql_fetch_object($rs)) {
$arr[] = $obj;
}

echo '{"bannersright":'.json_encode($arr).'}';

?>

JS:

$(function () {

        $("#wrapper #sidebar-right").autobrowse(

            {

                url: function (offset)
                {                   
                    return "http://www.mysite.com/json.php?count=10&page="
                           +Math.round(offset/10); // <-- AND HERE
                },
                template: function (response)
                {
                    var markup='';
                    for (var i=0; i<response.bannersleft.length; i++)
                    {
                        markup+='<a href="'+response.bannersleft[i].URL+'"><img src="'+response.bannersleft[i].Image+'" /></a>'
                    };
                    return markup;
                },
                itemsReturned: function (response) { return response.bannersleft.length; },
                offset: 0,
                max: 1,
                loader: '<div class="loader"></div>',
                useCache: false,
                expiration: 1
            }
        );

});