JavaScript/jQuery,从MySQL加载更多内容


JavaScript/jQuery to load more from MySQL?

我在谷歌上搜索了如何做到这一点,我得到了以下链接:http://www.9lessons.info/2009/12/twitter-style-load-more-results-with.html

这正是我想做的,但是这对我来说相当混乱,所以我无法弄清楚如何在我当前的文件中正确实现它。

我目前的查询如下。

if (!$query = @mysql_query("SELECT * FROM confessions ORDER BY date DESC LIMIT 10")) {
    echo '<strong>Error:</strong> '.mysql_error().'';
} else {
    echo '<div id="posts">';
    while ($q = mysql_fetch_array($query)) {
        $id = $q['id'];
        $name = $q['confession'];
        $date = date("j M Y", strtotime($q['date']));
        echo '<div class="confession" ';
        echo '>';
            echo '<table>';
                echo '<tr style="width:700px;">';
                    echo '<td style="width:100px;font-weight:lighter;font-style:italic;font-size:95%;">'.$date.'</td>';
                    echo '<td style="width:600px;">'.$name.'</td>';
                echo '</tr>';
            echo '</table>';
        echo '</div>';
    }
    echo '</div>';
}

显然,这只是抓取该表中最后 10 行的数据,据我所知,我只需要一些 JavaScript 来记住限制,以及它抓取了多少,这样它就可以抓取下一批。

somoene是否有可能给我一个链接来帮助我解释更多,或者写一些代码(从我给出的链接中(会有所帮助?

解决问题

显然,这只是抓取该表中最后 10 行的数据,据我所知,我只需要一些 JavaScript 来记住限制,以及它抓取了多少,这样它就可以抓取下一批。

是的,您的演示页面使用 Javascript 变量 ID 执行此操作,他们将其发送到ajax_more.php

somoene是否有可能给我一个链接来帮助我解释更多,或者写一些代码(从我给出的链接中(会有所帮助?

这是没有必要的。


澄清演示

演示的主页是 loadmore.php ,它创建了 html 页面,巧合的是还列出了查询中的第一批。 它使用按钮(锚链接,而不是链接的框(来存储最近的ID,在您的情况下,按钮的 ID 将是您的日期(注意:您的日期最好是唯一字段,否则您可能不会返回所有结果(。

当用户单击"更多"链接时,JavaScript 会获取其id,然后将其传递给 ajax_more.php ,它在查询中使用它来获取自上次查询以来的下一批结果,基于您发送它的 ID(SQL order by很重要(。


更多

  1. 正如@hakre所建议的,您所指的称为"分页",大多数数据库都有其实现,因此,如果您保持连接打开,则无需重新查询数据库。
    同样在mySQL中,您可以提供长度和偏移量,因此您可以存储已检索的记录量(称为偏移量(,而不是存储ID并使用小于。 例:

    SELECT * FROM <your_table> LIMIT <offset>, <length>
    -- In Use:
    SELECT * FROM confessions LIMIT 40, 10
    -- 40 is the value that you passed to ajax_more.php via AJAX
    
  2. 警告:该示例没有告诉您的是他们查询数据库的方式的安全隐患。 您将用户输入(通过 JavaScript(直接公开给数据库,而无需清理数据或使用参数传递的任何特殊用途。 这是一个很大的安全漏洞,可以打开SQL注入攻击,这些漏洞基本上是允许用户放置自己的SQL命令的漏洞,可以访问您的数据库,甚至整个系统。

您的查询:SELECT * FROM confessions ORDER BY date DESC LIMIT 10 具有不带逗号的 LIMIT 语句 10。 这意味着您只得到前 10 个结果。

只需观看 http://php.about.com/od/mysqlcommands/g/Limit_sql.htm 上的示例,您就会明白。