【问题标题】:Infinite Scrolling (mysql, php & js) Loop Issue无限滚动(mysql、php 和 js)循环问题
【发布时间】:2016-04-05 19:46:45
【问题描述】:

首先要声明:我对 php 和 js 还是很陌生,所以请温柔点...哈哈

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

将 PHP 文件中的“$perpage”设置为 10,加载前 20 个帖子,然后每次加载“新帖子”时,它只会一遍又一遍地加载帖子 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;
?>

【问题讨论】:

  • 输入一些调试信息。您是否确认将正确的 URL 传递给 $.ajax() 并且正在为 MySQL 构建预期的查询?
  • 您的 jQuery 代码看起来需要多个具有 pagenum 类的元素,但 PHP 只有一个输出。它只是从$_GET["page"] 输出传递的值而不改变它。
  • 感谢 Miken32!好的,一些菜鸟的答案即将出现: 1)我没有意识到 URL 需要特定的页面。我无意中将它的字面意思写为“url”。我尝试将上面的 php 文件作为 url 插入,但这只是一遍又一遍地循环帖子 1-10。 2)关于“专门为 MySQL 构建的 jQuery”,我不确定这是什么意思..?但是,它一直在毫无问题地从 sql 数据库中检索信息,问题只是检索的顺序。 3) 关于期望多个元素的最后一点,您建议对代码进行哪些更改?
  • @miken32 他的选择器中有一个:last。每次 jQuery 完成它都会添加更多的 html。该 html 将有另一个 class="pagenum" 元素。在他找到该值后,他将其加 1,然后使用该递增的值来构建他的 url。
  • @Leesome miken32 询问“为 MySQL 构建的预期查询”是:分配给$query 的字符串是您期望的实际查询吗?因此,如果您要去echo $query;,您会看到什么,并且该查询在 phpMyAdmin(或您用来直接在数据库上运行 SQL 查询的任何工具)中是否按预期工作

标签: javascript php mysql scroll infinite


【解决方案1】:

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

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

SELECT * FROM BestWorst LIMIT 15, 10    

相同
SELECT * FROM BestWorst LIMIT 15 OFFSET 10

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

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

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

现在,当您向下滚动页面时,在 $page 变量中获取 pagenum 的值(通过 AJAX 发送到您的 PHP 脚本),$start 相应地相乘,得到值 (@987654334 @) 用于查询的 OFFSET 部分 - 这正是您所期望的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2014-09-03
    • 1970-01-01
    • 2012-10-29
    • 1970-01-01
    • 2014-04-26
    • 2017-01-17
    相关资源
    最近更新 更多