从数据库中获取更多数据

时间:2012-01-17 17:56:55

标签: php jquery mysql ajax

我有一个正在显示的数据或“引号”列表,我只限制了10个,但我想要更多展示....

<ul class="recent-list">
  <?php 
    require("inc/connect.php");
    $result = mysql_query("SELECT * FROM entries ORDER BY id DESC LIMIT 0, 20", $link);
    while($row = mysql_fetch_array($result)){
  ?>

    <li id="<?php echo $row['id']; ?>" class="quote-wrap group">
      <span>
        some stuff here....           
      </span>

      <div class="quote">

        <p>
          <?php echo htmlentities($row['quote']); ?>
        </p>

      </div><!-- /.quote -->
    </li>

  <?php } ?>
</ul>

然后在列表的底部,有一个“显示更多”链接,其中显示的数据消失,下一组数据出现。

我想我理解“ajax”部分。它看起来像这样。

$(document).delegate("'#load-more'", "click", function(){


        $.post("load-more.php", $(this).serialize(), function(data) {
                   // success?
   });
});

其中load-more.php是我需要创建的文件,用于加载更多数据,并运行mysql查询。那部分令我感到困惑。

单击“显示更多”链接后,如何使用PHP获取下一组数据?我是PHP和ajax的新手,所以这对我来说很难。

1 个答案:

答案 0 :(得分:3)

OK!首先要做的是创建一个外部PHP文件,其中包含从数据库中获取数据的代码。

此文件应该能够传递$ _POST或$ _GET变量以及要从中查询记录的起始索引。看起来应该是这样的:

require("inc/connect.php");
$start = $_GET['start'];
$limit = $_GET['limit'];

我们定义$ start变量,它将保存应在查询中返回的第一个ID的值。然后是$ limit变量,它保存从数据库中获取的行数。

$result = 
mysql_query("SELECT * FROM entries ORDER BY id DESC LIMIT $start, $limit", $link);

然后我们使用这些变量构造并执行查询。在这个阶段,它开始变得更复杂。

$data = array(); //We create an empty array to store the new values in.

while($row = mysql_fetch_array($result)){//Then we loop through the return results.
    //Each row variable is an object, should have two properties
    // $row['id'] & $row['quote']
    // So we add this object into our $data array.
    array_push($data, $record);
}
//Now PHP works some of it's magic and turns that $data array into something 
//that javascript can understand. A JSON string.
echo(json_encode($data));

当Javascript使用它的AJAX调用读取该字符串时,它将能够将其转换回对象数组,这些对象仍然具有$ row变量具有的属性。但是在Javascript中,我们使用.property而不是引用具有['property']或 - &gt;属性语法的对象的属性,而不是PHP。我们使用.property。

我在这里很勇敢,我不知道你是否听说过很多关于JSON的内容,但如果你环顾四周,它会在互联网上得到很多支持。理解它是非常有用的。基本上我们刚刚使用PHP来创建一个对象数组,其中包含属性id和quote。然后我们将其作为JSON字符串回显。

所以,如果我们转到这个网址:

http://localhost/quotes.php?start=0&limit=10

然后我们应该看到一个看起来像这样的页面:

[
    {
        "id":0,
        "quote":"The first quote."
    },
    {
        "id":1,
        "quote":"The second quote."
    },
    {
        "id":2,
        "quote":"The third quote."
    },
    ...
]

现在它的格式不会很好,但如果你通过JSON格式化程序运行它(google it)。然后它应该类似于那样的东西。在继续之前确保它有效!

然后,我将从您的页面中删除嵌入式PHP,并使用刚刚编写的PHP脚本使用AJAX获取所有内容。

接下来,创建一个向PHP文件发送AJAX请求的jQuery函数。类似的东西:

function getQuotes(start, limit) {
    //Clear the recent list element
    $(".recent-list").html("");
    $.ajax({
        url:"http://localhost/quotes.php?start="+start+"&limit="+limit,
        success: function (data) {
            data = eval(data);
            //Data should now be a javascript array of objects.
            for(i=0;i<data.length;i++) {
                $(".recent-list").append("<li id='"+data[i].id+"' class='quote-wrap-group'><li>");
                $("#"+i).html("<div class='quote'><p>"+data[i].quote+"</p></div>");
            }
        }
    });
}

我知道最后一个函数看起来有点令人困惑,对PHP页面发出了AJAX请求,数据被收集并变成一个数组。我们循环遍历数组,并以与之前配置的方式相同的方式将值插入页面。

如果在名为currentIndex的变量中包含当前索引,则可以知道接下来请求的索引。您可以使用此变量来确定哪个是下拉的下一个索引,例如

getQuotes(currentIndex+10, 10);

这些都可以与页面上的某个按钮链接在一起,例如

<button id="more">Get more quotes</button>

然后在您的Javascript部分的顶部:

$(document).ready(function(){
    $("more").click(function(){
        getQuotes(currentIndex+10, 10);
        currentIndex += 10;
    });
});

这会创建一个函数,这样无论何时单击按钮,都会从中删除旧结果并添加新结果,同时递增currentIndex以使其保持正确。

虽然这看起来像是一种复杂的方法,但如果你学习这种技术,它将在调试和未来项目方面简化很多。所以值得坚持这一点,看看你是否能让它发挥作用。

我要注意的另一件事是,如果这些数据是敏感的,那么你应该使用$ _POST变量(jQuery仍支持它们),如果有大量数据,你应该限制PHP文件中的限制。

最后,所有这些代码都是用Stack Overflow编写的,不在我的脑海中,所以可能出现了问题。我希望你能把这个排序好,我希望这对你有所帮助!