2016-04-18 14 views
0

私のpostgresqlデータベースからのデータプルで行われたページの自動読み込みを取得したいと思います。ここでJQueryとPHPでスクロールダウンするときの自動ロードページ

望ましい結果である:http://www.sanwebe.com/assets/ajax-load-on-scroll/

私は問題index.phpをおよび/またはaudoload_process.phpのJavaScriptコードであるが、私は問題を見つけることができないんだと信じて。

config.phpを正しく動作している:

Here code using MySQL

私は3つのファイルを持っている

<?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(正)と印刷されたすべてのレコードを取得しますが、私がダウンしてスクロールダウンしたときに、私は次のエラー(内部サーバーを取得エラー):ページの下部に小さな負荷画像が表示されます。 (私はすでに、すべての50件のレコードを示したが、それが想定通りに機能していないためであると推測している。

enter image description here

enter image description here

すべてのヘルプは高く評価されるだろう。

答えて

1

キーは、単一/二重引用符でラップさせることができるので、私はそのあなたのPHPを疑い、私はいくつかのものを参照してください。

はセミコロンが欠落しています最後に

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、名前、メッセージからのページング注文の問題LIMIT#、#構文はサポートされていませんLINE 1:... T id、name、message FROMページ番号ORDER BY id ASC LIMIT 7、7 ^ヒント:別々のLIMIT句とOFFSET句を使用してください。 ) – Sam

+0

しかし、もし私が走った: '$ query =" SELECT id、name、message paginate ORDER BY id ASC LIMIT $ position ";"しかし、最初のレコードオーブンだけを返しています。 – Sam

+0

私はあなたが使用しているデータベースに精通していませんが、簡単なGoogle検索では、(LIMIT X OFFSET N)のための適切な構文が表示されますので、 '$ query =" id、name、messageを選択してください。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} 
関連する問題