PHP не отображается сообщение о результатах при публикации данных через ajax - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю функцию комментария для сообщения в блоге, используя 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;
}

Если вы первый комментарий к сообщению, комментарий отображается, но уведомление «Будьте первым, кто оставит комментарий» по-прежнемуотображается до обновления страницы.

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

это нормально, что он ведет себя так, и вы никогда не будете просить уведомление не появляться после комментария.

обновить код после успеха

$('.alert-primary').hide()
1 голос
/ 10 апреля 2019

Попробуйте вернуть ответ с сервера как 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);
}

Также используйте вкладку сети на консоли браузера, чтобы увидеть ответ, поступающий отсервер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...