簡體   English   中英

通過ajax發布數據時,PHP仍未顯示結果消息

[英]PHP no results message still showing when posting data via ajax

我正在使用PHP和ajax為博客文章創建評論工具,以發布評論,因此在發表評論后頁面不會刷新。

這是訪問頁面時顯示注釋的代碼。 如果帖子沒有評論,則會顯示一條通知。 所有這一切。

$stmt = $conn->prepare("SELECT comm.comment, comm.comment_date, m.member_screen_name
                        FROM comments comm
                        JOIN members m
                            ON comm.member_id = m.id
                        WHERE comm.entry_id = ?
                        ORDER BY comm.comment_date DESC");
$stmt->bind_param("i", $post_id);
$stmt->execute();
$stmt_result = $stmt->get_result();

if ($stmt_result->num_rows > 0) {
    while($row = $stmt_result->fetch_assoc()) {
        $comment = $row["comment"];
        $comment_date =  date_create($row['comment_date']);
        $comment_date = date_format($comment_date, ' l jS F Y H:i');
        $comment_author = $row["member_screen_name"];

        $comments .= "<div class='comment_div'><div class='small'><p class='text-info'>posted by $comment_author on $comment_date</p>$comment<hr /></div></div>";
    }
}else{
    $comments = "<div class='alert alert-primary' role='alert'>Be the first to comment</div>";
}

提交評論表單后,它將調用此函數。

$('#submit').click(function (e) {
    e.preventDefault();
    if (!$('#summernote').summernote('isEmpty')) {
        var comment = document.getElementById("summernote").value;
        var member_id = 1;
        var post_id = 1;
        $.ajax ({
            type: 'post',
            url: 'post_comment.php',
            data: {
                comment:comment,
                member_id:member_id,
                post_id:post_id,
            },
            success: function (response) {
                document.getElementById("all_comments").innerHTML=response+document.getElementById("all_comments").innerHTML;
                $("#summernote").summernote("reset");
            },
        });
    }else {
        alert('Please enter a comment');
    }
    return false;
}); 

這是post_comment.php頁面

if(isset($_POST['comment'])){
    $comments = "";
    $comment=$_POST['comment'];
    $member_id =$_POST['member_id'];
    $post_id =$_POST['post_id'];
    if(isset($comment)) {
        $stmt = $conn->prepare("INSERT INTO comments (entry_id, member_id, comment) VALUES (?, ?, ?)");
        $stmt->bind_param("iis", $post_id, $member_id, $comment);   
        $stmt->execute();
        $entry_id = mysqli_insert_id($conn);

        $stmt = $conn->prepare("SELECT comm.comment, comm.comment_date, m.member_screen_name
                                FROM comments comm
                                JOIN members m
                                   ON comm.member_id = m.id
                                WHERE comm.entry_id = ?
                                   AND comm.id = $entry_id
                                ORDER BY comm.comment_date DESC");
        $stmt->bind_param("i", $post_id);
        $stmt->execute();
        $stmt_result = $stmt->get_result();

        if ($stmt_result->num_rows > 0) {
            while($row = $stmt_result->fetch_assoc()) {
                $comment = $comment;
                $comment_date =  date_create($row['comment_date']);
                $comment_date = date_format($comment_date, ' l jS F Y H:i');
                $comment_author = $row["member_screen_name"];

                $comments .= "<div class='comment_div' style='background:red'><div class='small'><p class='text-info'>posted by $comment_author on $comment_date</p>$comment<hr /></div></div>";

                echo $comments ;
             };
            exit;
        }
    }
}else {
    header("location: /blog");
    exit;
}

如果您是第一個對帖子發表評論的人,則會顯示評論,但在刷新頁面之前,仍會顯示“成為第一個發表評論”的通知。

嘗試將服務器的響應作為json返回。 另外,請刪除服務器端的出口和標頭。

<script type="text/javascript">
    $('#submit').click(function (e) {
        e.preventDefault();
        if (!$('#summernote').summernote('isEmpty')) {
            var comment = document.getElementById("summernote").value;
            var member_id = 1;
            var post_id = 1;
            $.ajax ({
                type: 'post',
                url: 'post_comment.php',
                data: {
                    comment:comment,
                    member_id:member_id,
                    post_id:post_id,
                },
                dataType : "json",
                encode   : true,
                success: function (data) {
    $.each(data, function(index, element){ 
$('#all_comments').append("<div class='comment_div' style='background:red'><div class='small'><p class='text-info'>posted by " +element.comment_author + "on " + element.post_date+"</p>"+element.comment+"<hr /></div></div>"); 
}); 

$("#summernote").summernote("reset"); 
$('.alert').empty();
                },
            });
        }else {
            alert('Please enter a comment');
        }
        return false;
    });
</script>

然后是您的服務器端。

 <?php
if (isset($_POST['comment'])) {
    $comment       = $_POST['comment'];
    $member_id     = $_POST['member_id'];
    $post_id       = $_POST['post_id'];
    $commentsArray = array();
    $stmt          = $conn->prepare("INSERT INTO comments (entry_id, member_id, comment) VALUES (?, ?, ?)");
    $stmt->bind_param("iis", $post_id, $member_id, $comment);
    $stmt->execute();

    $entry_id = mysqli_insert_id($conn);

    $stmt = $conn->prepare("SELECT comm.comment, comm.comment_date, m.member_screen_name
                                FROM comments comm
                                JOIN members m
                                ON comm.member_id = m.id
                                WHERE comm.entry_id = ?
                                AND comm.id = ?
                                ORDER BY comm.comment_date DESC");
    $sql->bind_param("ii", $post_id, $entry_id);
    $sql->execute();
    $sql_result = $sql->get_result();

    if ($stmt_result->num_rows > 0) {
        while ($row = $stmt_result->fetch_assoc()) {
            $comment_date =  date_create($row['comment_date']);
            $commentsArray[] = array(
                'comment' => $comment,
                 'post_date' = date_format($comment_date, ' l jS F Y H:i');
                'comment_author' => $row['member_screen_name']
            );
        }

    }


    echo json_encode($commentsArray);
}

還可以使用瀏覽器控制台上的“網絡”選項卡查看來自服務器的響應。

他的行為舉止是正常的,並且您絕不會要求在評論后不顯示通知。

成功后更新代碼

$('.alert-primary').hide()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM