2

ユーザーが一番下に到達したときにコンテンツを動的にロードする必要がある Web サイトのセグメントがあります。私はjQueryを使用しています。これはスクロールを検出するコードです:

$(document).ready(function() { 
    $(window).scroll(function() {
        if($(window).scrollTop() + $(window).height() == $(document).height()) {
        alert("Bottom reached");
            $('div#loadMoreComments').show();
            dataStr = "from=" + $(".n:last").attr('id')
            $.ajax({
                type: "POST",
                url: "ajax/query.php",
                data: dataStr,
                success: function(html) {
                    if(html){       
                        $("#hold").append(html);
                        alert("Data was added");
                    }
                    else{       
                        $('div#loadMoreComments').replaceWith("<center><h1 style='color:red'>End of countries !!!!!!!</h1></center>");
                        alert("Data was not added");
                    }
                }
            });
        }
    });
});

私が抱えている最初の問題は、ユーザーがページの上部に到達したときにのみ、下部へのスクロールが検出されることです。2番目の問題は、変数が投稿されていないように見えるため、コンテンツがまったくロードされないことです.query.phpのコードは次のとおりです。

if(array_key_exists('from', $_POST)) {
    $from = htmlspecialchars(stripslashes(mysql_real_escape_string($_POST['from'])));
    $to = 15;
    $re = ("SELECT status as status, sid as sid, UNIX_TIMESTAMP(timestamp) as timestamp FROM mingle_status WHERE uid = '$uid' ORDER BY timestamp DESC LIMIT $from,$to"); //query
  }
  else {
    $re = ("SELECT id as id, status as status, sid as sid, UNIX_TIMESTAMP(timestamp) as timestamp FROM mingle_status WHERE uid = '$uid' ORDER BY timestamp DESC LIMIT 1"); //query
  }
  $result = mysql_query($re) or die (mysql_error());
  while($st = mysql_fetch_assoc($result)) {
    $status = nl2br($st['status']);
    $sid = $st['sid'];  
    $td = $st['timestamp'];
    $id = $st['id'];
    ?>
        <div id="<?php echo $id; ?>" class="id">
            <!-- stuff -->
        </div>
    <?php
    }
    ?>

そしてエラー:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '",15' at line 1

誰かがこれで私を助けることができれば、それは素晴らしいことです.

編集:さて、div を生成できるようになりましたが、ページの上部までスクロールして 1 つの div のみを追加し、再度上部にスクロールするとまったく同じ div が追加されます。

4

1 に答える 1

3

これは間違っています:

$from = htmlspecialchars(stripslashes(mysql_real_escape_string($_POST['from'])));

from整数であると想定される場合は、次を使用してください。

$from = (int) $_POST['from'];

また、その番号はhtmlのIDからのものであり、IDを番号で始めることはできません。

編集:追加の問題は、from存在する場合はSQLクエリでIDを選択していないことです。選択したとしても、このアプローチでは、将来、レコードを削除してIDがシーケンシャルでなくなったときに問題が発生する可能性があります。

最初の問題については、firebugの変更でそれを解決できます。

 if($(window).scrollTop() + $(window).height() == $(document).height()) {

に:

 if( ($(window).scrollTop() + $(window).height()) > ($(document).height() -  10) ) {

編集2:非シーケンシャルIDの問題を解決するには、次のfromようなものを使用してjavascriptで計算するのが最も簡単な方法です。

dataStr = "from=" + $(".n").length;    // just count the number of elements you are showing already
于 2012-06-26T17:14:51.880 に答える