当页面到达底部时,ajax 和 php 从 mysql 加载更多内容

Posted

技术标签:

【中文标题】当页面到达底部时,ajax 和 php 从 mysql 加载更多内容【英文标题】:ajax and php to load more content from mysql when page gets to bottom 【发布时间】:2015-08-23 05:26:07 【问题描述】:

我已经在这个网站上看到了这个问题的一些答案,但我仍然无法按照我想要的 2 天来实施它。我是一个初学者,所以一个非常清楚的解释会很有帮助,

我有一些数据的 mysql 数据库,我想从一个表中读取并一次显示 30 行,当用户滚动到页面末尾时,我想加载另外 30 行(我已经能够完成前 30 个,但加载其余的对我来说是一个挑战)。

我已经有了这个:

$(document).ready(function()   
       $(window).scroll(function() 
           if($(window).scrollTop() == $(document).height() -$(window).height()) 
               //ive tried all sorts of things here it just doesnt work
           
);

加载下一个内容的 php 文件的示例也会有所帮助,

我正在使用 php 和 mysqli

非常感谢。

所以这是我的 loadmore.php,它的功能,没有设置输出样式:

<?php 
require_once 'functions.php'; //my databse connection is in this file

//i created a function queryMysql($query) in functions.php, thats what is used here 
$result = queryMysql("SELECT * FROM articles WHERE live='1' ORDER BY created DESC LIMIT $start, 30");
$num = $result->num_rows;

for ($j = 0 ; $j < $num ; ++$j)
    $row = $result->fetch_array(MYSQLI_ASSOC);
    $title = $row['title'];
    $subtitle = $row['subtitle'];
    echo "$title<br />$subtitle";                                                    
?>

对于 ajax,我将其更改为我在这里得到的第一个答案,但我所有的尝试都是这样的:

 $(window).scroll(function() 
                            if($(window).scrollTop() == $(document).height() - $(window).height()) 
                                $.ajax(
                                    type: method,
                                    data: , //Your data
                                    url: 'loadmore.php',
                                    async: true,
                                    success: function (data, textStatus, jqXHR) 
                                        $('#article-inro-hold').append(data);
                                    ,
                                    error: function (jqXHR) 
                                        //Error handler
                                    
                                );
                            
                        );

【问题讨论】:

是的,这就是我真正遇到问题的地方,没有太多经验,这对我来说是一个边走边学的项目 向我们展示您的 AJAX(甚至可能是您的 PHP 代码)。我们可以从那里开始工作。 显示您尝试过的代码,即使它不起作用。人们更愿意通过发现/修复错误来提供帮助,而不是仅仅为您完成工作。 【参考方案1】:

尝试实现jquery ajax,大致如下:

$(document).ready(function () 
    $(window).scroll(function () 
        if ($(window).scrollTop() == $(document).height() - $(window).height()) 
            $.ajax(
                type: method,
                data: , //Your data
                url: 'your/url/to/get/more/content/from',
                async: true,
                success: function (data, textStatus, jqXHR) 
                    $('#myDiv').append(data);
                ,
                error: function (jqXHR) 
                    //Error handler
                
            );
        
    );
);

【讨论】:

【参考方案2】:

您必须每次进行 ajax 调用,当您滚动量上升时,更接近文档高度。除了你还必须管理你的偏移量,否则你会得到重复的记录(你可以使用隐藏字段),并在你的 ajax 调用中每次传递它。

<div id="ajax-response"></div>
<input type="hidden" value="0" id="offset" />

<script>
$(document).ready(function()   
    $(window).scroll(function() 
        if($(window).scrollTop() == $(document).height() - $(window).height()) 

           $.ajax(
               url: 'requesthandler.php',
               type: 'post',
               data: 
                    task: 'show-more',
                    offset: document.getElementById('offset').value
               ,
               success: function(response)
                    jsonObj = $.parseJSON(response);
                    $('#ajax-response').append(jsonObj.html);
                    document.getElementById('offset').value = jsonObj.offset;
               
           )
        
    );
);

requesthandler.php 看起来像:

if($_POST['task'] == 'show-more')
    $offset = (int) $offset;
    $sql = "SELECT * FROM table limit $offset, 10";
    $data = '';
    foreach ($conn->query($sql) as $row) 
        $data .= "<div>$row['column']</div>";
    
    echo json_encode(array(
        'offset' => ($offset + 10),
        'html' => $data,
    ))

【讨论】:

【参考方案3】:
$query = $db->query("SELECT * FROM bags ORDER BY id DESC LIMIT 7");

我们可以在这里使用$_POST 来获取只需要的信息吗?

$limit=($_POST["bag"]);
$query = $db->query("SELECT * FROM bags WHERE id = '.$limit.' ORDER BY id DESC LIMIT 7");

【讨论】:

当您在 Stack Overflow 上回答问题时,请附上您的回答描述,而不仅仅是一行代码。另外,因为这个问题已经回答过了,所以这个答案是没有必要的。

以上是关于当页面到达底部时,ajax 和 php 从 mysql 加载更多内容的主要内容,如果未能解决你的问题,请参考以下文章

当用户到达页面底部时关闭弹出菜单

尝试在页面滚动上加载帖子时出现 Ajax/Jquery/PHP 问题

页面延时加载技术

显示div直到到达页面底部时出错

CSS:即使在滚动时也使页脚始终位于页面底部

jquery 滑出页面