在无限滚动上使用AJAX和PHP从表中获取结果?
我正在尝试使用AJAX和PHP动态地(当用户滚动到底部时)从表中获取20个结果 到目前为止,我做了以下工作 AJAX在无限滚动上使用AJAX和PHP从表中获取结果?,php,jquery,mysql,ajax,pdo,Php,Jquery,Mysql,Ajax,Pdo,我正在尝试使用AJAX和PHP动态地(当用户滚动到底部时)从表中获取20个结果 到目前为止,我做了以下工作 AJAX // Infinite Scroll loadData( 0 ); //Hide Loader for Infinite Scroll $('div.ajaxloader').hide(); }); function loadData ( last_id ) { var $entries = $('.directory'), $loader = $('
// Infinite Scroll
loadData( 0 );
//Hide Loader for Infinite Scroll
$('div.ajaxloader').hide();
});
function loadData ( last_id ) {
var $entries = $('.directory'),
$loader = $('.ajaxloader', $entries).show();
$.get( '/getentries.php', { last_id : last_id }, function( data ) {
$entries.append( data ).append( $loader.hide() );
filterEntries();
});
};
//Isotope filter - no changes to this code so I didn't include it
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
$('div.ajaxloader').show('slow');
loadData( $( '.directory item:last' ).data('id') )
}
PHP
try {
// Connect and create the PDO object
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `directory` WHERE user_active != ``";
$result = $conn->query($sql);
$sth = $conn->prepare("SELECT * FROM directory WHERE user_active != ''");
$sth->execute(array(':county' => $county));
$c = 1;
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
echo '<div class="entry';
if (($c % 4) == 1) echo ' alpha ';
// ECHO RESULT STYLES ETC HERE
$c++;
}
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}
试试看{
//连接并创建PDO对象
$conn=newpdo(“mysql:host=$hostdb;dbname=$namedb”、$userdb、$passdb);
$conn->exec(“设置字符集utf8”);//设置编码UTF-8
//定义并执行SQL选择查询
$sql=“从用户所在的“目录”中选择*=”;
$result=$conn->query($sql);
$sth=$conn->prepare(“从用户处于活动状态的目录中选择*!=”);
$sth->execute(数组(':country'=>$country));
$c=1;
而($row=$sth->fetch(PDO::fetch_ASSOC)){
echo'从foo中选择*,其中id>$lastIndex按id限制排序20;
编辑:哎哟。这是针对常规mysql的,不使用预先准备好的语句。根据,以下是您的答案:
$sql = "SELECT * FROM directory WHERE id > :lastIndex AND user_active != '' LIMIT 20";
$sth = $conn->prepare($sql);
$sth->execute(array(':lastIndex' => $lastIndex));
它的作用是在$lastIndex
之后获取接下来的20个结果。您需要做的就是将lastIndex的值(它应该与页面上的结果数一致)与您的请求一起发送,并相应地使用它
或者,您可以做相反的操作,将结果发送到客户端,以便javascript在用户发出新请求时存储和使用。简单的回答是向查询添加偏移量。这就像分页一样。您只需跟踪所处的页面,并按一定值偏移查询。在在这种情况下,您不需要更改页面,只需在最后加载它。您可以使用谷歌搜索它并进一步了解它您需要在mysql查询中添加限制。请参阅下面的代码
// Infinite Scroll
loadData( 0 );
//Hide Loader for Infinite Scroll
$('div.ajaxloader').hide();
});
function loadData ( last_id ) {
var $entries = $('.directory'),
$loader = $('.ajaxloader', $entries).show();
$.get( '/getentries.php?startp=0&endp=20', { last_id : last_id }, function( data ) {
$entries.append( data ).append( $loader.hide() );
filterEntries();
});
};
//Isotope filter - no changes to this code so I didn't include it
$(window).scroll(function () {
if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10) {
$('div.ajaxloader').show('slow');
loadData( $( '.directory item:last' ).data('id') )
}
PHP
try {
// Connect and create the PDO object
$conn = new PDO("mysql:host=$hostdb; dbname=$namedb", $userdb, $passdb);
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
// Define and perform the SQL SELECT query
$sql = "SELECT * FROM `directory` WHERE user_active != ``";
$result = $conn->query($sql);
$sth = $conn->prepare("SELECT * FROM directory WHERE user_active != '' limit $_REQUEST['startp'],$_REQUEST['endp']");
$sth->execute(array(':county' => $county));
$c = 1;
while ($row = $sth->fetch(PDO::FETCH_ASSOC)) {
echo '<div class="entry';
if (($c % 4) == 1) echo ' alpha ';
// ECHO RESULT STYLES ETC HERE
$c++;
}
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}
//无限滚动
负荷数据(0);
//隐藏无限滚动加载程序
$('div.ajaxloader').hide();
});
函数加载数据(最后一个\u id){
var$entries=$('.directory'),
$loader=$('.ajaxloader',$entries).show();
$.get('/getentries.php?startp=0&endp=20',{last\u id:last\u id},函数(数据){
$entries.append(data.append($loader.hide());
过滤器();
});
};
//同位素过滤器-此代码没有更改,所以我没有包含它
$(窗口)。滚动(函数(){
if($(窗口).scrollTop()>=$(文档).height()-$(窗口).height()-10){
$('div.ajaxloader').show('slow');
loadData($('.directory项:last')。数据('id'))
}
PHP
试一试{
//连接并创建PDO对象
$conn=newpdo(“mysql:host=$hostdb;dbname=$namedb”、$userdb、$passdb);
$conn->exec(“设置字符集utf8”);//设置编码UTF-8
//定义并执行SQL选择查询
$sql=“从用户所在的“目录”中选择*=”;
$result=$conn->query($sql);
$sth=$conn->prepare(“从用户处于活动状态的目录中选择*!=''限制$请求['startp'],$请求['endp']);
$sth->execute(数组(':country'=>$country));
$c=1;
而($row=$sth->fetch(PDO::fetch_ASSOC)){
echo“你应该看看Google上的pageless
关键字。你的prepare()
与你的execute()不匹配
它应该会告诉你,.LIMIT只会给你前20行。你需要偏移量。请阅读下面的我的答案,不要忘记投票。:DThanks@Akamaozu,我尝试了下面的方法,但没有结果…$lastindex=2;$sth=$conn->prepare(“从id>$lastindex和user\u active的目录中选择*!=''LIMIT 5;”;$sth->execute();为PDO示例编辑。最初的一个设置为常规mysql查询。对。$sql行上有一个拼写错误。现在修复它。