从数据库加载更多状态

时间:2014-01-14 10:47:38

标签: javascript php jquery ajax

HI <!/强> 我想在Feed的底部创建一个“加载更多状态”按钮,因为您可以从代码中设置限制为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。

有一个很好的方法可以做到这一点。

请注意,我已经搜索了很多,我只找到了不太适合我的代码的示例。

<?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>';
    } 
    ?>

4 个答案:

答案 0 :(得分:2)

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

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

moreResults.php页面中,根据限制获得正确的结果。限制值将使用`qry_limit'js变量传递到moreResults.php

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

试试吧。

<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>

moreResults.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>';


    }

    ?>

答案 1 :(得分:1)

将查询移动到单独的php文件中,并使用清理的get输入作为限制,然后使用jquery的Ajax功能以所需的限制值调用php文件。虽然它有点风险。如果我是你,我会阅读PDO和Prepared声明。

答案 2 :(得分:1)

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

<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 */
}
?>

但是,您应该通过anotherPage.php显示的最新帖子id,而不是再次加载帖子,然后再加载帖子。

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

答案 3 :(得分:1)

编辑Jesons awnser。

您必须添加此代码

'qry_limit = parseInt(qry_limit);'

将memory_limit值转换为Int而不是字符串