无限滚动(mysql、php & js)循环问题

Infinite Scrolling (mysql, php & js) Loop Issue

首先要声明:我对 php 和 js 还是超级新手,所以请保持温和...哈哈

无论如何,我正在尝试创建一个简单的无限滚动来从 mysql table 检索帖子。我拼凑了各种 Internet 教程中的代码来创建可以访问和检索信息的东西。问题是帖子的数量以及正在检索的帖子。

将 PHP 文件中的“$perpage”设置为 10,加载前 20 个帖子,然后每次加载 "new posts",它只会一遍又一遍地加载帖子 11-20。我想这可能是简单的东西,但我的 php & js 水平真的只是在我能读懂但不会写的水平。

我尝试将 LIMIT 添加到 $sql 行的末尾,但这似乎完全破坏了代码。

如有任何帮助,我们将不胜感激!

如果你想在现实生活中看到这个,(非常)草稿网站在这里:site

$(document).ready(function(){
  function getresult(url) {
    $.ajax({
      url: url,
      type: "GET",
      data:  {rowcount:$("#rowcount").val()},
      beforeSend: function(){
        $('#loader-icon').show();
      },
      complete: function(){
        $('#loader-icon').hide();
      },
      success: function(data){
        $("#faq-result").append(data);
      },
      error: function(){}             
    });
  }
  $(window).scroll(function(){
    if ($(window).scrollTop() == $(document).height() - $(window).height()){
      if($(".pagenum:last").val() <= $(".total-page").val()) {
        var pagenum = parseInt($(".pagenum:last").val()) + 1;
          getresult('../php/best_result.php?page='+pagenum);
      }
    }
  }); 
});


<?php
require_once("login.php");
$db_handle = new DBController();
$perPage = 10;

mysql_query("SET NAMES utf8");

$sql = '
  SELECT letter, dayfield, monthfield, yearfield, nickname, country
  FROM BestWorst
  WHERE `lettertype` = "best" ORDER BY `ID` DESC';



$page = 1;
if(!empty($_GET["page"])) {
$page = $_GET["page"];
}

$start = ($page-1)*$perPage;
if($start < 0) $start = 0;

$query =  $sql . " limit " . $start . "," . $perPage; 
$faq = $db_handle->runQuery($query);

if(empty($_GET["rowcount"])) {
  $_GET["rowcount"] = $db_handle->numRows($sql);
}
$pages  = ceil($_GET["rowcount"]/$perPage);
$output = '';
if(!empty($faq)) {
  $output .= '<input type="hidden" class="pagenum" value="' . $page . '" /><input type="hidden" class="total-page" value="' . $pages . '" />';
  foreach($faq as $k=>$v) {
    $output .= '<div class="entry wow fadeInUp lefttext"><br/><p>'
      . nl2br($faq[$k]["letter"])
      . '</p><br/><p class="small" align="right">- This story took place on '
      . $faq[$k]["dayfield"] . '/'
      . $faq[$k]["monthfield"] . '/'
      . $faq[$k]["yearfield"]
      . '. Posted by ' . $faq[$k]["nickname"]
      . ' from ' . $faq[$k]["country"]
      .'<p></div><br/><br/><br/>';
  }
}
print $output;
?>

您对查询中 $start$perPage 的用法有点困惑。

在 MySQL 中,以下查询获取前 15 个结果,从该组结果的第 11 行 (OFFSET 10) 开始:

SELECT * FROM BestWorst LIMIT 15, 10    

相同
SELECT * FROM BestWorst LIMIT 15 OFFSET 10

在您的案例中 $start 的用法应映射到查询的 OFFSET,而 $perPage 在 MySQL 术语中的字面意思是 LIMIT .

因此,交换查询中提到的两个变量应该可以解决问题。

$query =  $sql . " limit " . $perPage . "," . $start; 

现在,当您向下滚动页面并在 $page 变量中获取 pagenum 的值(通过 AJAX 发送到您的 PHP 脚本)时, $start 相应地相乘,为您的查询的 OFFSET 部分提供值 (0, 10, 20, ...) - 这正是您所期望的。