php - 使用 AJAX/PHP/mysqli 创建加载更多按钮

标签 php jquery mysql ajax

在下面的代码中,我尝试使用 AJAX 创建一个加载更多按钮。我有 main.php 其中包括用于最初从数据库调用博客的 PHP 代码、一些 jQuery 代码和一个加载更多按钮。然后我有ajax_more.php,当单击“加载更多”时,它会从数据库调用更多数据。加载更多按钮显示完美,单击时它们会更改为加载,然后消失。没有发生任何其他事情,main.php 仍然显示我们首先调用的两个初始博客。请查看代码并帮助该代码哪里出错。

ma​​in.php

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        $(document).on('click', '.show_more', function () {
            var ID = $(this).attr('id');
            $('.show_more').hide();
            $('.loding').show();
            $.ajax({
                type: 'POST',
                url: 'ajax_more.php',
                data: 'id=' + ID,
                success: function (html) {
                    $('#show_more_main' + ID).remove();
                    $('.columns').append(html);
                }
            });
        });
    });
</script>

<?php
$query = "
    SELECT blogs_id, title, body, posted_by, full_name, bio, posted, category
    FROM blogs 
        INNER JOIN categories 
            ON categories.category_id=blogs.category_id 
    WHERE category='cat1' OR category='catt2' OR category='cat3' OR category='cat4' 
    ORDER BY blogs_id desc 
    LIMIT 2
";
$result = mysqli_query($con,$query);
$rowCount = mysqli_num_rows($result);

if($rowCount > 0){
    while ($row = mysqli_fetch_assoc($result)) {
        $blogs_id = $row['blogs_id'];
        $title = $row['title'];
        $body = $row['body'];
        $posted_by = $row['posted_by'];
        $full_name = $row['full_name'];
        $bio = $row['bio'];
        $posted = $row['posted'];

        echo "
            <div class='db'>
                <h2>$title</h2>
                <p>$body</p>
                <p>$bio</p>
            </div>
        ";
?>
<div class="show_more_main" id="show_more_main<?php echo $blogs_id; ?>">
    <span id="<?php echo $blogs_id; ?>" class="show_more" title="Load more posts">Show more</span>
    <span class="loding" style="display: none;"><span class="loding_txt">Loading…</span></span>
</div>

ajax_more.php

<?php
if(isset($_POST["blogs_id"]) && !empty($_POST["blogs_id"])) {
    $query = "
        SELECT blogs_id, title, body, posted_by, full_name, bio, posted, category 
        FROM blogs 
            INNER JOIN categories ON categories.category_id=blogs.category_id 
        WHERE category='Entertainment' OR category='Politics' OR category='Sports' OR category='Travel'
            AND blogs_id < ".$_POST['blogs_id']." 
        ORDER BY blogs_id DESC 
        LIMIT 2
    ";
    $result = mysqli_query($con,$query);
    $rowCount = mysqli_num_rows($result);
    if($rowCount > 0){
        while ($row = mysqli_fetch_assoc($result)) {
            $blogs_id = $row['blogs_id'];
            $title = $row['title'];
            $body = $row['body'];
            $posted_by = $row['posted_by'];
            $full_name = $row['full_name'];
            $bio = $row['bio'];
            $posted = $row['posted'];

            echo "
                <div class='db'>
                <h2>$title</h2>
                <p>$body</p>
                <p>$bio</p>
                </div>
            ";
?>

最佳答案

您应该将查询更改为此

$query = "SELECT blogs_id, title, body, posted_by, full_name, bio, posted, category FROM
 blogs INNER JOIN categories ON categories.category_id=blogs.category_id WHERE
(category='Entertainment' OR category='Politics' OR category='Sports' OR category='Travel') 
 AND blogs_id < " . $_POST['blogs_id'] . " ORDER BY blogs_id DESC LIMIT 2";

所有 OR 必须括在方括号内......

关于php - 使用 AJAX/PHP/mysqli 创建加载更多按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32856626/

相关文章:

javascript - 有没有办法在 JavaScript 加载之前不加载 html?

PHP Carbon DateTime 增加两个月并完全跳过 11 月

Javascript 正则表达式替换并添加找到的所有元素到数组

php - 更新行不起作用,保存按钮复制行

PHP 通过多维数组的值更新表

php - Laravel 另一种附加到模型的方法

php - 在 PHP 5.3 中创建单例基类

javascript - 你能在一行代码中使用 jQuery 的 $(this) 来修改元素吗?

javascript - Bootstrap 确认不尊重选项

mysql - 具有连接和多个分组依据的 SQL 查询