Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在无限滚动上使用AJAX和PHP从表中获取结果?_Php_Jquery_Mysql_Ajax_Pdo - Fatal编程技术网

在无限滚动上使用AJAX和PHP从表中获取结果?

在无限滚动上使用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 = $('

我正在尝试使用AJAX和PHP动态地(当用户滚动到底部时)从表中获取20个结果

到目前为止,我做了以下工作

AJAX

// 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行上有一个拼写错误。现在修复它。