【问题标题】:issue with load more results in php ajax在 php ajax 中加载更多结果的问题
【发布时间】:2014-05-12 08:04:27
【问题描述】:

我正在关注我从github 下载的 PHP 上的 MVC 结构,这对我很有帮助。

现在我已经实现了延迟加载的 Ajax 功能,以便在用户点击时加载更多帖子(加载更多)。

我已经在这个结构上实现了它,它运行良好,但我遇到了小问题。问题是当没有可用记录时,它仍然会显示 Load more content 然后显示 No More Content to Load

我试图解决这个问题,但我无法解决这就是我来到这里的原因。

我的代码有效:

index.php

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
    $('.more_button').live("click", function () {
        var getId = $(this).attr("id");
        if (getId) {
            $("#load_more_" + getId).html('<img src="<?php echo URL; ?>public/img/load_img.gif" style="padding:10px 0 0 100px;"/>');
            $.ajax({
                type: "POST",
                url: "<?php echo URL; ?>home/loadSong",
                data: "getLastContentId=" + getId,
                cache: false,
                success: function (html) {
                    $("ul#load_more_ctnt").append(html);
                    $("#load_more_" + getId).remove();
                }
            });
        } else {
            $(".more_tab").html("<div class='all_loaded'>No More Content to Load</div>");
        }
        return false;
    });
});
</script>

<div class='main_div'>
    <ul class="load_content" id="load_more_ctnt">
        <?php foreach ($songs as $song) { $id = $song->id; ?>
            <li> <a href="#"><?php if (isset($song->artist)) echo $song->artist; ?></a> </li>
        <?php } ?>
    </ul>
    <div class="more_div">
        <a href="#">
            <div id="load_more_<?php echo $id; ?>" class="more_tab">
                <div class="more_button" id="<?php echo $id; ?>">Load More Content</div>
            </div>
        </a>
    </div>
</div>

home.php(控制器)

public function loadSong() {

        if(isset($_POST['getLastContentId'])) {
            // load model, perform an action on the model
            $getLastContentId=$_POST['getLastContentId'];
            $songs_model = $this->loadModel('HomeModel');
            $songs_model->loadmoreSong($getLastContentId);
        }
    }

homemodel.php(模型)

public function loadmoreSong($getLastContentId) {       

        if(isset($_POST['getLastContentId'])) {

            $getLastContentId=$_POST['getLastContentId'];

            $sql = "select id, artist, track, link from song WHERE id <".$getLastContentId." ORDER BY id DESC LIMIT 10";
            $query = $this->db->prepare($sql);
            $query->execute();
            $count = $query->fetchAll();

            if($count>0) {
                $id = "";
                for($i=0; $i<count($count); $i++){
                    $id = $count[$i]->id;
                    $message = $count[$i]->artist;
                ?>

                    <li>
                        <a href="#"><?php echo $message; ?></a>
                    </li>

                <?php
                    }
                ?>

                <a href="#">
                    <div id="load_more_<?php echo $id; ?>" class="more_tab">
                        <div id="<?php echo $id; ?>" class="more_button">Load More Content</div>
                    </div>
                </a>

            <?php
                }
            }
    }

我的现场演示链接:Load More Demo

我希望你能理解我的问题。需要您的帮助来解决此问题。

谢谢。

【问题讨论】:

  • 您需要阅读结果总数并相应地显示或不显示 .more_div 部分。
  • 请提供模型中的else语句。

标签: php jquery mysql ajax


【解决方案1】:

只需编辑这段代码:

<a href="#">
 <div id="load_more_<?php echo $id; ?>" class="more_tab">
 <div id="<?php echo $id; ?>" class="more_button">Load More Content</div>
 </div>
</a>

到这里:

<?php    
if($id!=""){
?>
<a href="#">
 <div id="load_more_<?php echo $id; ?>" class="more_tab">
 <div id="<?php echo $id; ?>" class="more_button">Load More Content</div>
 </div>
</a>
<?php
}
?>

【讨论】:

  • 非常感谢您的帮助:)
【解决方案2】:

SQL_CALC_FOUND_ROWS 添加到您的 SELECT 查询中,例如:

select SQL_CALC_FOUND_ROWS id, artist, tra....

然后检查找到的行:

SELECT FOUND_ROWS()

将结果存储在 var $found_rows 中。

然后,在 homemodel.php 的末尾,您将拥有:

if ( $count < $found_rows ) {
    ?>
            <a href="#">
                <div id="load_more_<?php echo $id; ?>" class="more_tab">
                    <div id="<?php echo $id; ?>" class="more_button">Load More Content</div>
                </div>
            </a>
    <?php
} else {
    ?>
            <a href="#">
                <div id="load_more_<?php echo $id; ?>" class="more_tab">
                     <div class='all_loaded'>No More Content to Load</div>
                </div>
            </a>
    <?php
}

【讨论】:

    【解决方案3】:

    改变:

    if($count > 0)
    

    到:

    if($count)
    

    【讨论】:

    • 这没有任何改变,除了额外的内部转换为 bool。
    • 实际上是的,它确实改变了一切,因为当您检查数组是否大于标量时,它将始终返回 true
    • 很高兴发现它。你告诉他:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2019-02-27
    • 2020-01-06
    • 2018-10-12
    相关资源
    最近更新 更多