2016-04-18 3 views
0

Ich möchte ein Auto laden auf der Seite mit der Daten aus meiner PostgreSQL-Datenbank. HierAutoload-Seite beim Scrollen mit JQuery und PHP

ist das gewünschte Ergebnis: http://www.sanwebe.com/assets/ajax-load-on-scroll/

Ich glaube Problem ist in dem Javascript-Code von index.php und/oder den audoload_process.php aber ich bin nicht in der Lage, das Problem zu finden .

Here code using MySQL

Ich habe 3 Dateien:

Config.php, die richtig funktioniert:

<?php 
$db_username = 'user=myuser'; 
$db_password = 'password=mytest'; 
$db_name = 'dbname=test'; 
$db_host = 'host=localhost'; 
$items_per_group = 5; 

$db = pg_connect($db_host, $db_username, $db_password, $db_name); 
?> 

Index.php Datei: (I getestet und die PHP Teil davon arbeitet, Ich denke, das Javascript funktioniert nicht).

<!DOCTYPE html> 
<html> 
<head> 
<script type="text/javascript" src="js/jquery-1.9.0.min.js"></script> 

<?php 
include("config.php"); 

    $get_total_rows = 0; 

    $db = pg_connect("$db_host $db_name $db_username $db_password"); 
    $query = "SELECT * FROM paginate"; 
    $results = pg_query($query); 

    $get_total_rows = pg_numrows($results); 

    //break total records into pages 
    $total_groups= ceil($get_total_rows/$items_per_group); 
?> 

<script type="text/javascript"> 
$(document).ready(function() { 
var track_load = 0; //total loaded record group(s) 
var loading = false; //to prevents multipal ajax loads 
var total_groups = <?=$total_groups;?>; //total record group(s) 

$('#results').load("autoload_process.php", {'group_no':track_load}, function() {track_load++;}); //load first group 

$(window).scroll(function() { //detect page scroll 

    if($(window).scrollTop() + $(window).height() == $(document).height()) //user scrolled to bottom of the page? 
    { 

     if(track_load <= total_groups && loading==false) //there's more data to load 
     { 
      loading = true; //prevent further ajax loading 
      $('.animation_image').show(); //show loading image 

      //load data from the server using a HTTP POST request 
      $.post('autoload_process.php',{'group_no': track_load}, function(data){ 

       $("#results").append(data); //append received data into the element 

       //hide loading image 
       $('.animation_image').hide(); //hide loading image once data is received 

       track_load++; //loaded group increment 
       loading = false; 

      }).fail(function(xhr, ajaxOptions, thrownError) { //any errors? 

       alert(thrownError); //alert with HTTP error 
       $('.animation_image').hide(); //hide loading image 
       loading = false; 

      }); 

     } 
    } 
}); 
}); 
</script> 
<style> 
body,td,th {font-family: Georgia, Times New Roman, Times, serif;font-size: 15px;} 
.animation_image {background: #F9FFFF;border: 1px solid #E1FFFF;padding: 10px;width: 500px;margin-right: auto;margin-left: auto;} 
#results{width: 500px;margin-right: auto;margin-left: auto;} 
#resultst ol{margin: 0px;padding: 0px;} 
#results li{margin-top: 20px;border-top: 1px dotted #E1FFFF;padding-top: 20px;} 
</style> 
</head> 

<body> 

<ol id="results"> 
</ol> 
<div class="animation_image" style="display:none" align="center"><img src="ajax-loader.gif"></div> 

</body> 
</html> 

autoload_process.php Datei

<?php 
include("config.php"); //include config file 

if($_POST) //NOT SURE IF THIS WORKS FOR Postgresql or I would need somethingk like if ($_SERVER["REQUEST_METHOD"] == "POST") 
{ 
echo "inside IF" //To see if it gets to here --> It doesn't 
//sanitize post value 
$group_number = filter_var($_POST["group_no"], FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH); 

//throw HTTP error if group number is not valid 
if(!is_numeric($group_number)){ 
    header('HTTP/1.1 500 Invalid number!'); 
    exit(); 
} 

//get current starting point of records 
$position = ($group_number * $items_per_group); 

    $query = "SELECT id, name, message FROM paginate ORDER BY id ASC LIMIT $position, $items_per_group"; 
    $result = pg_query($query); 

    $myrow = pg_fetch_assoc($result); 
    $id = $myrow[id]; 
    $name = $myrow[name]; 
    $message = $myrow[message]; 

echo '<ul class="page_result">'; 
while(pg_fetch_assoc($results)){ //fetch values 
    echo '<li id="item_'.$id.'"><span class="page_name">'.$id.') '.$name.'</span><span class="page_message">'.$message.'</span></li>'; 
} 
echo '</ul>'; 

pg_close(); 
} 
?> 

ERGEBNISSE UND THEMEN

  1. ich nichts als Ergebnisse, wenn meine Index.php Ausführung
  2. Wenn ich diesen Code zu schreiben, in die Index.php, um zu sehen, ob Informationen abgerufen werden:

    $get_total_rows = pg_numrows($results); 
    echo "total number of rows" .$get_total_rows; 
    echo '<br>'; 
    echo '<br>'; 
    
    //break total records into pages 
    $total_groups= ceil($get_total_rows/$items_per_group); 
    echo "total number of groups" .$total_groups; 
    echo '<br>'; 
    echo '<br>'; 
    
    
    while($myrow = pg_fetch_assoc($results)) { 
    $id = $myrow[id]; 
    $name = $myrow[name]; 
    $message = $myrow[message]; 
    echo $id; 
    echo $name; 
    echo $message; 
    echo '<br>'; 
    echo '<br>'; 
    
    } 
    

Dann bekomme ich (Anzahl der Zeilen = 50 (richtig) Gesamtzahl der Gruppen = 10 (richtig) und alle Datensätze gedruckt, aber wenn ich nach unten scrollen Sie nach unten bekomme ich folgende Fehler (Internal Server Fehler): Das kleine Ladebild erscheint unten auf der Seite. (Ich vermute, dass dies, weil ich bereits alle 50 Aufzeichnungen zeigten, aber es wirkt nicht, wie es anzunehmen.

enter image description here

enter image description here

Jede Hilfe sehr geschätzt würde.

Antwort

1

da der Schlüssel kann in Einzel-/doppelte Anführungszeichen eingewickelt werden, vermute ich, seine Ihre php, ich sehe einige Dinge:

fehlt Semikolon am Ende

echo "inside IF"; 

zum testen Sie könnten versuchen:

statt:

if($_POST) 

Verwendung

if(isset($_POST["group_no"])) 

und für die Prüfung nur, statt

header('HTTP/1.1 500 Invalid number!'); 

versuchen

echo "Error not a number: " . $_POST["group_no"]; 

die Änderung des Fehlers ermöglicht es Ihnen, die tatsächlichen Fehler schnell zu sehen, statt 500 zurückkehren und nachdem er sich nicht mit: interne Serverfehler

Diese könnten das Problem nicht lösen , aber zumindest bei der Diagnose helfen.

+0

Vielen Dank für Ihren Kommentar. Ein großer Teil des Problems war das Semikolon, das Sie angegeben haben. Jetzt bekomme ich wenigstens ein paar Informationen. Problem: Wenn ich rannte: '$ query =" SELECT ID, Name, Nachricht FROM paginate ORDER BY ID ASC LIMIT $ position, $ items_per_group ";' Ich bekomme diesen Fehler: (Problem mit Abfrage SELECT ID, Name, Nachricht FROM paginate ORDER BY id ASC LIMIT 7, 7 FEHLER: LIMIT #, # Syntax wird nicht unterstützt LINE 1: ... T ID, Name, Nachricht FROM paginate ORDER BY ID ASC LIMIT 7, 7^TIPP: Verwenden Sie separate LIMIT- und OFFSET-Klauseln.) – Sam

+0

aber wenn ich rannte: '$ query =" SELECT ID, Name, Nachricht FROM paginate ORDER BY ID ASC LIMIT $ Position ";' dann funktioniert es, jedoch gibt nur den ersten Rekord Ofen ein vorbei. – Sam

+0

Ich bin nicht vertraut mit der Datenbank, die Sie verwenden, aber eine schnelle Google-Suche zeigt die richtige Syntax für Limit ist (LIMIT X OFFSET N), so '$ query =" SELECT ID, Name, Nachricht von Paginate ORDER BY ID ASC LIMIT $ position OFFSET $ items_per_group ";' – imvain2

1

Sie haben einen Syntaxfehler in Ihrem ajax .post - einfache Anführungszeichen, wo sie nicht benötigt werden.Dies:

$.post('autoload_process.php',{'group_no': track_load} 

Sollte dies sein:

$.post('autoload_process.php',{group_no: track_load}