sql >> Databáze >  >> RDS >> Mysql

Načítání dalších položek z databáze ~ Infinite Scroll

To je docela složitá otázka. Než se pokusíte nakódovat svou vlastní variaci od začátku, doporučuji vám podívat se na Infinite Scroll jQuery Plugin . Pokud to nevyřeší, zde je možné řešení:

Javascript

$(document).ready(function () {
    loadData( 0 );
    //Hide Loader for Infinite Scroll
    $('div.ajaxloader').hide();

});

function loadData ( last_id ) {
    var $entries = $('#entries'),
        $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( $( '#entries item:last' ).data('id') )
    }
});

PHP

<?php
//Connect to Database
$con = new mysqli( 'localhost', 'root', 'root', 'awards' );
if( $con->connect_errno ) {
    die( 'Could not connect:' . $con->connect_error );
}

$last_id = isset( $_GET['last_id'] ) ? (int)$_GET['last_id'] : 0; 
$stmt = $con->prepare( 'SELECT * FROM entry WHERE status = "registered" AND entry_id > (?) ORDER BY entry_id LIMIT 0, 30' );
$stmt->bind_param( 'i', $last_id );
$stmt->execute();

$result = $stmt->get_result();    
while( $row = $result->fetch_assoc() ) {
    //Get award cat ids
    $awardcat = $row['awards_subcategory_id'];

    print "<div class='item item$awardcat clearfix' data-id='" . $row['entry_id'] . "'>";//add award cat id to each div
    print '<img class="image" src="http://localhost:8888/awardsite/wp-content/themes/award/placeholder.jpg" />';
    print "<p > Studio: " . $row['studio'] . "</p>";
    print "<p class='client'> Client: " . $row['client'] . "</p>";
    print "<p class='description'> Description: " . $row['description'] . "</p>";
    print "<p class='solutionprocess'> Solution Process: " . $row['solution_process'] . "</p>";
    print "</div>";

}
$con->close();

Kód Javascript odešle požadavek AJAX GET do php skriptu s ID poslední položky zobrazené v seznamu. PHP skript pak vrátí 30 položek, které následují po tomto id. Původní soubor Javascript měl v sobě trochu kódu PHP. Odstranil jsem to, protože nevím, jaký je jeho účel (možná vydáváte JS z PHP skriptu?). Také celý XMLHttpRequest kód lze zkrátit na $.get() funkce. Stejně používáte jQuery, takže nemusíte znovu vymýšlet kolo. Použil jsem data-id atribut pro přenos ID položek. To je atribut specifický pro HTML5. Pokud jej nechcete používat, stačí použít id místo toho, ale pamatujte, že id nemohou začínat číslem – měli byste před ním uvést písmeno.

V PHP skriptu jsem použil mysqli místo mysql_* funkcí. Měli byste použít mysqli nebo PDO od nynějška, protože jsou spolehlivější a bezpečnější než (nyní zastaralé) mysql_* . Vaše instalace PHP s největší pravděpodobností tato rozšíření již obsahuje. Všimněte si, že jsem nezpracoval chyby dotazování databáze. Tento kód můžete napsat sami. Pokud se objeví jiné druhy chyb, zveřejněte je zde a já se je pokusím opravit.




  1. Povolit jiné znaky než ASCII v databázi MySQL

  2. 3 metody opětovného sestavení všech indexů pro všechny tabulky pomocí T-SQL v databázi SQL Server

  3. Jak vložit data skrytého pole do databáze pomocí php

  4. PHP MYSQL:způsob, jak vypsat tabulku ve vzestupném pořadí