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

上記では、3 項変数の割り当てを使用して、引数が渡されているかどうかを確認しています。渡されていない場合は、デフォルト値を使用します。mysqli と、準備済みの 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値 (または行の取得を開始する場所) が提供されます。DB から 20 個の結果を取り出した場合、それは 0 ベースなので、0 ~ 19 になります。を実行.lengthすると、1 based結果が返さ20れ、19 ではなく が返されます。これで問題ありません。最後の行も返されたくないので、ロジックは問題ありません。ajax 関数の 2 つの変数offset/totalは、3 項変数の割り当てに対応しています。

于 2013-05-28T16:52:04.343 に答える