【问题标题】:Load more status from database从数据库加载更多状态
【发布时间】:2014-01-14 10:47:37
【问题描述】:

嗨! 我现在想在提要底部创建一个“加载更多状态”按钮”,您可以从代码中看到我已将帖子限制设置为 20 个。

我要找的是 改变

的 Jquery 或 javascript 函数(可能是 AJAX)
$statusQ = "SELECT * FROM `status` order by id desc LIMIT 20";

$statusQ = "SELECT * FROM `status` order by id desc LIMIT 40";

我只想更改 LIMIT 并刷新对服务器的请求,而不更新 HTML、javascript 和 CSS。

有什么好的方法吗?

请注意,我已经在 Google 上搜索了很多,但我只找到了与我的代码不太相符的示例。

<?php
    $statusQ = "SELECT * FROM `status` order by id desc LIMIT 20";
    $how_meny_rows = mysqli_query($mysqli, "SELECT * FROM `status`");
    $row_cnt = mysqli_num_rows($how_meny_rows);
    $statusA = mysqli_query($mysqli,$statusQ);

    while ($row = mysqli_fetch_array($statusA)){

      echo '<div class="statusholder">
                <div class="status-img">
                    <img src="' . $row['Bild'] . '"/>
                </div>
                <div class="this-status">
                    <h4 class="status-who">'. $row['user'] .'</h4>
                    <p class="status">' .$row['status']. '</p>
                    <a class="status-like" href="javascript" onclick""> Gilla</a>
                    <p class="num_like comingsoon">' . $row['like'] . '</p>
                    <a class="status-comment" href="javascript" onclick"">Kommentera detta</a>
                    <p class="status-timestamp">' . $row['timestamp'] . '</p>

                </div>
            </div>';


    }
    if ($row_cnt > 20) {
        echo '<div class="loadstatus">
                <a href="javascript:void(0);" onclick="" class="comingsoon"> klicka för att ladda flerstatusar </a>     </div>';
    } 
    ?>

【问题讨论】:

  • 提示:将 LIMIT 子句更改为:LIMIT 0, 20 然后将 0 移动到一个变量(它是一个偏移量),当您需要更多结果时,通过 Ajax 发送您想要的 x*number 个项目到你的脚本,然后只是附加输出。但是,这种方法需要编写 Ajax 请求和管理它的 PHP 代码,并且属于“HTML/Javascript 更新”类别

标签: javascript php jquery ajax


【解决方案1】:

您可以使用 jQuery Ajax 实现“加载更多”功能。

在主页中加载前 20 条状态记录并单击 comingsoon 链接,使用 jQuery $.ajax 方法调用另一个页面 moreResults.php

moreResults.phppage 根据限制得到正确的结果。限制值将使用 `qry_limit' js 变量传递给moreResults.php

此值将从qry_limit 隐藏变量中检索。成功后,将加载的结果追加到statusDiv div 并更新加载下一组记录的限制值。

试试这个。

<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
<script type"text/javascript">
$(document).ready(function(){
    $('a.comingsoon').click(function () {
        var qry_limit = $("#qry_limit").val();

            $.ajax({
                type: "POST",
                url: "moreResults.php",
                data: "limit="+qry_limit,
                cache: false,
                success: function(responseData){
                    var newLimit=qry_limit+20;
                    $("div#statusDiv").append(responseData);
                    $("#qry_limit").val(newLimit); 
                }
            });


        return false;
    });
});
</script>
</head>
<body>
<?php

    $statusQ = "SELECT * FROM `status` order by id desc LIMIT 0,20";
    $how_meny_rows = mysql_query($mysqli, "SELECT * FROM `status`");
    $row_cnt = mysqli_num_rows($how_meny_rows);
    $statusA = mysql_query($mysqli,$statusQ);
     echo '<div id="statusDiv">';
    while ($row = mysqli_fetch_array($statusA)){

      echo '<div class="statusholder">
                <div class="status-img">
                    <img src="' . $row['Bild'] . '"/>
                </div>
                <div class="this-status">
                    <h4 class="status-who">'. $row['user'] .'</h4>
                    <p class="status">' .$row['status']. '</p>
                    <a class="status-like" href="javascript" onclick""> Gilla</a>
                    <p class="num_like comingsoon">' . $row['like'] . '</p>
                    <a class="status-comment" href="javascript" onclick"">Kommentera detta</a>
                    <p class="status-timestamp">' . $row['timestamp'] . '</p>

                </div>
            </div>';


    }
    echo '</div>';
    if ($row_cnt > 20) {
        echo '<div class="loadstatus">
                <a href="javascript:void(0);" onclick="" class="comingsoon"> klicka för att ladda flerstatusar </a>     </div>';
    } 
    ?>
    <input type="hidden" name="qry_limit" id="qry_limit" value="20"/>
    <input type="hidden" name="total_results" id="total_results" value="<?php echo $row_cnt; ?>"/>
    </body>
    </html>

更多结果.php

<?php
    //Database Connections
    $limit=$_REQUEST['limit'];
    $statusQ = "SELECT * FROM `status` order by id desc LIMIT $limit,20";

    $statusA = mysqli_query($mysqli,$statusQ);

    while ($row = mysqli_fetch_array($statusA)){

      echo '<div class="statusholder">
                <div class="status-img">
                    <img src="' . $row['Bild'] . '"/>
                </div>
                <div class="this-status">
                    <h4 class="status-who">'. $row['user'] .'</h4>
                    <p class="status">' .$row['status']. '</p>
                    <a class="status-like" href="javascript" onclick""> Gilla</a>
                    <p class="num_like comingsoon">' . $row['like'] . '</p>
                    <a class="status-comment" href="javascript" onclick"">Kommentera detta</a>
                    <p class="status-timestamp">' . $row['timestamp'] . '</p>

                </div>
            </div>';


    }

    ?>

【讨论】:

  • 谢谢!你们所有人都非常有帮助,让我对 AJAX 有了更多的了解,非常感谢 Jenson M John。我试过你的解决方案,它没有问题!
【解决方案2】:

将查询移动到一个单独的 php 文件,并使用已清理的 get 限制输入,然后使用 jquery 的 Ajax 功能调用具有您需要的限制值的 php 文件。不过这有点冒险。如果我是你,我会阅读 PDO 和 Prepared statements。

【讨论】:

    【解决方案3】:

    您可以向输出另外 20 个提要的 PHP 脚本发出 jQuery post 请求,然后在当前页面中显示结果。这是一个例子:

    <script>
    $(document).ready(function() {
        $("#loadMoreButton").clicked(function() {
            $.post(
                "anotherPage.php",
                { dummy: "" },
                function(returnedData) {
                    $("#loadMoreButton").before(returnedData);
                    }
                );
            });
        });
    </script>
    

    假设你有上面的 jQuery,你当前的页面是这样的:

    <div id="feeds"> The feeds appear here </div>
    <button id="loadMoreButton">Load more posts</button>
    

    然后,您的 anotherPage.php 文件将包含以下内容:

    <?php
    if (isset($_POST['dummy']) {
        /* Database operations to load the next twenty posts */
        /* Also, you will echo them here like you do in a normal page */
    }
    ?>
    

    但是,不要重新加载帖子,您应该将显示的最新帖子的id 传递给anotherPage.php,然后只加载之后的帖子。

    编辑:感谢@NorthBridge 指出了一种简单的方法(请参阅他的评论):)

    【讨论】:

      【解决方案4】:

      在 Jesons awnser 上编辑。

      您必须添加此代码

      'qry_limit = parseInt(qry_limit);'
      

      将您的 qry_limit 值转换为 Int 而不是字符串

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-13
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-18
        相关资源
        最近更新 更多