0

私のサイトには結果のページがあります。下にスクロールするとAJAXを使用してより多くの結果を返しますが、問題は結果を取得するときに同じ結果を複数回取得するように見えることです。私はこれを引き起こす原因がわかりません、誰かが私が間違っていることを見ることができますか?

AJAX

$(window).scroll(function () {
    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 10)  {
         var number = $(".directory").children().length;
        $.ajax({
           type: "POST",
           url: "getentries.php",
           data: "count="+number,
           success: function(results){
             $('.directory').append(results);
           }
         });



    } else {}
});

PHP

$result = mysql_query("SELECT * FROM directory LIMIT {$_POST['count']},12");

$c = 1;
while($row = mysql_fetch_array($result))
  {
  echo '<div class="entry';
            if (($c % 4) == 1) echo ' alpha ';
            echo 'ALL THE DATA IS GOING HERE';      
            $c++;
  }
4

3 に答える 3

3

問題は、スクロール中に複数のajax呼び出しが発生する可能性が高いことです。次のように、時限イベントリスナーを設定します。

didScroll = false;
$(window).scroll(function() {
    didScroll = true;
});

setInterval(function() {
    if ( didScroll ) {
        didScroll = false;
        if(($(document).height() - $(window).height()) - $(window).scrollTop() < 100) {
            // load more results
        }
    }
}, 250);

この記事では、ソリューションが悪い考えである理由を説明しています:http: //ejohn.org/blog/learning-from-twitter/

于 2012-12-28T17:20:10.407 に答える
1

したがって、問題は、スクロールのしきい値に達すると、ajax呼び出しを複数回行うことです。最初のajax呼び出しにフラグを追加して、ajax呼び出しが終了するまでフラグが再度呼び出されないようにする必要があります。

ajaxInProgress = false;
if (!ajaxInProgress && ($(window).scrollTop() >= $(document).height() - $(window).height() - 10)) {
    ajaxInProgress = true;
    $.ajax({
       type: "POST",
       url: "getentries.php",
       data: "count="+number,
       success: function(results){
         ajaxInProgress = false;
         $('.directory').append(results);
       }
     });
}
于 2012-12-28T17:17:02.543 に答える
0

問題は、ajax呼び出しでデータを渡す方法にあります。Jqueryのドキュメントから、データ内のjavascriptオブジェクトにカウントと量を入れる必要があります。

$.ajax({
       type: "POST",
       url: "getentries.php",
       data: {count: number},
       success: function(results){
         $('.directory').append(results);
       }
     });

これを修正すると、Mysqlクエリは正しい次のデータをビューに返すはずです。

お役に立てれば!

于 2012-12-28T17:07:17.903 に答える