2016-04-18 5 views
0

Я хочу получить автоматическую загрузку на странице прокрутки, выполненную с помощью данных, извлекаемых из моей базы данных postgresql.Страница автозагрузки при прокрутке вниз с помощью JQuery и PHP

Вот желаемый результат: http://www.sanwebe.com/assets/ajax-load-on-scroll/

Я считаю, проблема в коде Javascript в index.php и/или audoload_process.php, но я не могу найти проблему ,

Here code using MySQL

У меня есть 3 файла:

config.php, который работает правильно:

<?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 файл: (я тестировал и PHP часть его работает, Я думаю, что javascript не работает).

<!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 файл

<?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(); 
} 
?> 

РЕЗУЛЬТАТЫ И ПРОБЛЕМЫ

  1. я ничего не получаю, как результаты при выполнении моего index.php
  2. Если я пишу этот код index.php, чтобы узнать, извлекается ли информация:

    $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>'; 
    
    } 
    

Тогда я получаю (Общее количество строк = 50 (правильный) Общее число групп = 10 (Correct) и все записи напечатаны, но когда я прокручиваю вниз вниз, я получаю следующую ошибку (Internal Server Ошибка): Изображение с низкой загрузкой отображается в нижней части страницы. (Я предполагаю, что это потому, что я уже показал все 50 записей, но она не действует, как это предположим.

enter image description here

enter image description here

Любая помощь будет высоко оценен.

ответ

1

, так как ключ может быть завернуты в одинарные/двойные кавычки, я подозреваю, что его РНР, я вижу некоторые вещи:

отсутствует точка с запятой в конце

echo "inside IF"; 

для тестирования вы можете попробовать:

вместо:

if($_POST) 

использования

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

и только для тестирования, а не

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

попробовать

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

смену ошибки позволит вам увидеть фактическую ошибку быстро, вместо того, чтобы вернуться 500 и с его завершаться: внутренней ошибки сервера

Они не могли бы решить эту проблему , но, по крайней мере, помогают в диагностике.

+0

Благодарим вас за комментарий. В значительной части проблемы отсутствовала точка с запятой, которую вы указали. Теперь, по крайней мере, я получаю некоторую информацию. Проблема: если я запустил: '$ query =" SELECT id, name, message FROM paginate ORDER BY id ASC LIMIT $ position, $ items_per_group ";' Я получаю эту ошибку: (Проблема с запросом SELECT id, name, message FROM paginate ORDER BY id ASC LIMIT 7, 7 ОШИБКА: LIMIT #, # синтаксис не поддерживается LINE 1: ... T id, name, message FROM paginate ORDER BY id ASC LIMIT 7, 7^СОВЕТ: Используйте отдельные предложения LIMIT и OFFSET.) – Sam

+0

, но если я запустил: '$ query =" SELECT id, name, message FROM paginate ORDER BY id ASC LIMIT $ position ";' тогда он работает, однако возвращает только первую печь записи. – Sam

+0

Я не знаком с используемой вами базой данных, однако быстрый поиск в Google показывает правильный синтаксис ограничения (LIMIT X OFFSET N), поэтому '$ query =" SELECT id, name, message FROM paginate ORDER BY id ASC LIMIT $ position OFFSET $ items_per_group ";' – imvain2

1

У вас есть синтаксическая ошибка в вашем ajax .post - одинарные кавычки, где они не нужны.Это:

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

Должно быть так:

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