我正在使用一个名为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页面,如果你有其他解决方案,请分享它。
答案 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
}
);
});