2017-05-14 3 views
1

最近、私はphpとjqueryを使用してより多くの機能をロードしました。私は、DB接続コードと、次のクエリを記述し、私のコードresult .phpjQueryとPHPを使用してinfifniteスクロールに多くをロードする

Htmlの

<div class="container clearfix product-output"> 

</div> 

jQueryの

$.ajax({ 
    method: "POST", 
    url: "result.php", 
    data: { keyword:"all"} 
}).done(function(msg) { 
    $(".product-output").html(msg); 
    $(".load-more").on("click",function(){ 
     var load_num= $('.load-more').length; 
     var appear=[]; 
     $(".im-product-block").each(function(){ 
      appear.push($(this).attr('id')); 
     }); 
     $.ajax({ 
      method: "POST", 
      url: "result.php", 
      data: { keyword: "all", y_id: appear, load_num: load_num } 
     }).done(function(msg1){ 
      $('.load-more-div').before(msg1); 
      if($(".hide-load").val()==1){ 
       $(".load-more").hide(); 
      } 
     }); 

    }); 
}); 

を参照してください。

$query = 'SELECT * FROM `product` ORDER BY id DESC LIMIT 15'; 
$query_1 = 'SELECT * FROM `product` ORDER BY id DESC'; 

if (ISSET($_POST['y_id'])) { 
    $appear = implode("', '", $_POST['y_id']); 
    $query = "SELECT * FROM `product` WHERE id NOT IN('{$appear}') ORDER BY id DESC LIMIT 15"; 
    $query_1 = "SELECT * FROM `product` WHERE id NOT IN('{$appear}') ORDER BY id DESC"; 
} 
$result = $conn->query($query); 
$result_1 = $conn->query($query_1); 
$total_num = $result_1->num_rows; 
echo '<div class="container clearfix product-output">'; 

if ($result->num_rows > 0) { 

    while ($row = $result->fetch_assoc()) { ?> 

     <div class="col-sm-2 im-product-block" id="<?php echo $row["id"]; ?>"> 

      <p class="product-name"> <?php echo $row["name"]; ?></p></div> 

    <?php } 
    echo '</div>'; 

    if ($total_num > 15 && $_POST[load_num] == 0) { 
     echo '<div class="load-more-div"><p class="load-more"> Load More</p></div>'; 
    } 
    if ($total_num < 15) { 
     echo '<input type="hidden" name="hide-load" class="hide-load" value="1"> 
<div class="load-finished"><p class="load-f"> All Products Loaded Successfully</p></div>'; 
    } 

} 

ここで、この機能はすべて正常に機能しています。しかし、もっと多くのボタンをクリックするのではなく、ユーザーがスクロールしてロードすると、クリックすることなく製品を自動的に取得する必要があります。次のコード

$(window).scroll(function() { 
    var hT = $(".load-more").offset().top, 
     hH = $(".load-more").outerHeight(), 
     wH = $(window).height(), 
     wS = $(this).scrollTop(); 
    if (wS > (hT+hH-wH)){ 
     $(".load-more").trigger("click"); 
    } 
}); 

しかし、ここで実行を使用している私のために

が停止されていない無限.ITにcontuniedされます。このコードをチェックして、良い方法を提案してください。

答えて

1

あなたのajax呼び出しが行われてページに書き込まれている間、あなたの負荷の実行を停止する必要があると思います。おそらく、より多くをロードする必要があるかどうかを判断するためにブール変数を設定します。

あなたのAJAX機能が終了し、あなたがデータをロードした後に戻ってtrueにcanLoadを設定

var canLoad = true; 

$(window).scroll(function() { 
    var hT = $(".load-more").offset().top, 
     hH = $(".load-more").outerHeight(), 
     wH = $(window).height(), 
     wS = $(this).scrollTop(); 
    if (wS > (hT+hH-wH) && canLoad){ 
     canLoad = false; 
     $(".load-more").trigger("click"); 
    } 
}); 

関連する問題