首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在无限滚动上使用AJAX和PHP从表中获得结果?

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

Stack Overflow用户
提问于 2012-12-19 19:56:37
回答 3查看 1.8K关注 0票数 6

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

到目前为止.

AJAX

代码语言:javascript
运行
复制
// 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') )
    }

代码语言:javascript
运行
复制
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();
}

现在,我的AJAX和查询似乎工作得很好,但问题是它只是再次删除记录,而不是接下来的20个?

我以前从来没有这样做过,如果我听起来很天真的话,很抱歉,但是任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-20 09:57:25

您需要在mysql查询中添加限制。请看下面的代码

代码语言:javascript
运行
复制
// 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();
}

谢谢里帕·萨哈

票数 1
EN

Stack Overflow用户

发布于 2012-12-19 20:13:34

SELECT * FROM foo WHERE id > $lastIndex ORDER BY id LIMIT 20;

编辑:哇哦。这是用于常规mysql的,而不是使用准备好的语句。基于php文档,下面是您的答案应该是什么样子:

代码语言:javascript
运行
复制
$sql = "SELECT * FROM directory WHERE id > :lastIndex AND user_active != '' LIMIT 20";
$sth = $conn->prepare($sql);
$sth->execute(array(':lastIndex' => $lastIndex));

这样做是为了在$lastIndex之后获得接下来的20个结果。您所需要做的就是将lastIndex的值(应该与页面上的结果数量相一致)与您的请求一起发送,并相应地使用它。

或者,您可以进行反向操作,并将结果发送给客户端,以便在用户提出新请求时存储和使用$lastIndex

票数 0
EN

Stack Overflow用户

发布于 2012-12-20 03:31:29

简单的回答是在查询中添加偏移量。就像分页一样。您只需跟踪您所在的页面,并按特定值对查询进行偏移。在这种情况下,您只需在最后加载页面,而不是更改页面。下面是一个例子你可以搜索它并阅读更多关于它的信息

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13960171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档