0

How struggling to make a PHP call to get items to load on scroll. I have a while loop of items and need a php code for infinity.php to load more items to the ID "stream" but can't figure out a solution. Would be greatful for some expertise help!

PHP on Main-page:

<?php
$getStream = mysql_query("SELECT * FROM ".$DBprefix."xxx WHERE xxx='xxx' AND status='1' ORDER by id");

$counter = 0;
$max = 2;

while($stream = mysql_fetch_array($getStream) and ($counter < $max)) {
$counter++;

  }
?>

I have this Jquery:

    function lastAddedLiveFunc()
{
    $('div#loader').fadeIn();

    $.get("infinity.php", function(data){
        if (data != "") {
            //console.log('add data..');
            $("#stream").append(data);
        }
        $('div#loader').empty();
    });
};

HTML:

<div id='stream'></div>
4

1 回答 1

1

我认为你在这里遗漏了一些关键部分。首先,当我们使用无限滚动并从数据库中获取数据时,您需要一个LIMIT子句,LIMIT 子句允许建立offset, total关系。其中 offset 表示要从哪一行开始,total 是我们想要取的行数。

最初,你会有这样的东西

$offset = $_GET['offset'] ? $_GET['offset'] : 0; //start at 0th row if no variable set
$total = $_GET['total'] ? $_GET['total'] : 20; // get 20 rows if no variable set

在上面,我们使用三元变量赋值来检查参数是否被传递给我们,如果没有,那么我们使用默认值。我们将使用mysqli 和prepared、bind_param、execute、bind_result 和fetch_assoc() 方法。

if( $getStream = $mysqli->prepare("SELECT * FROM ? WHERE xxx=? AND status=? ORDER by id LIMIT ?,?"):

    $ret = ''; // a variable place holder

    // in the above statement, fill in the ?'s
    // the actual ? will be the value we wish to return, in order from first to last.
    $getStream->bind_param('ssddd', $DBprefix.'xxx', 'xxx', 1, $offset, $total);

    //execute our query
    $getStream->execute();

    $getStream->bind_result($field1, $field2, $field3, $field4); // each field needs it's own variable name, that way we can access them later.

    while($row = $getStream->fetch_assoc()):
        $ret .= '<div class="my-infinite-element"><h3>'. $field1 .'</h3><p>'. $field2.'</p>'. $field3 .', '. $field4 .'</div>';
    endwhile;

    echo $ret;

else:
    return FALSE;
endif;

现在这就是我们使用 MySQLI 处理获取数据的方式;现在让我们编写 ajax 语句来取回数据。

$.ajax({
    type: 'GET',
    url : 'infinity.php',
    data: {
        'offset' : $('.my-infinite-elements').length,
        'total' : 20
    },
    success: function(data){
        if(false !== data){
            $('#stream').append(data);
        }
    } 
});

在上面,我们唯一应该担心的是$('.my-infinite-elements').lengthmy-infinite-elements我们为返回的每个元素使用了一个类。这样,我们可以计算页面上元素的现有长度,这将提供我们的offset值(或者我们想要从哪里开始获取行)。如果我们从数据库中提取 20 个结果,它是基于 0 的,所以我们会得到 0-19。当我们这样做时.length,我们将得到一个1 based结果,它将返回20,而不是 19。没关系,因为我们不希望最后一行也返回,所以我们的逻辑很好。我们的 ajax 函数中的两个变量offset/total,对应于我们的三元变量赋值。

于 2013-05-28T16:52:04.343 回答