Получить значение msg.success из php (json_encode)

92
17 марта 2021, 19:40

Есть форма:

<div id="addCommentContainer"> 
    <form id="addCommentForm" method="POST" action=""> 
        <label for="name">Имя</label> 
        <input type="text" name="name" id="name"> 
 
        <label for="email">E-mail</label> 
        <input type="text" name="email" id="email"> 
 
        <label for="messageBody">Текст сообщения</label> 
        <textarea name="messageBody" id="messageBody" cols="30" rows="10"></textarea> 
        <div class="buttons"> 
            <!--<input type="submit" id="preview" value="Предворительный просмотр">--> 
            <input type="submit" id="submit" value="Отправить"> 
        </div> 
    </form> 
</div>

Я отправляю её в php для вставки данных в БД через ajax без перезагрузки страницы (Данные добавляются в таблицу БД корректно). Код скрипта:

<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(function () { 
        $('#addCommentForm').bind('submit', function () { 
            $.ajax({ 
                type: 'post', 
                url: "submit.php", 
                data: $(this).serialize(), 
                success: function (msg) { //Данные отправлены успешно 
                    if(msg.success){ 
                        //Отобразить новый комментарий 
                    } else { 
                        //Сообщение о не корректном вводе 
                    } 
                } 
            }); 
            return false; 
        }); 
    }); 
</script>

Не могу получить значение msg.success в if из php.

Вот код php:

$arr = $_POST; 
$validates = Comment::validate($arr); 
if ($validates) { 
    $result = mysqli_query($link, "INSERT INTO comment(name, email, messageBody) VALUES ('" . $arr['name'] . "', '" . $arr['email'] . "', '" . $arr['messageBody'] . "')"); 
    echo json_encode(array("success"=>1)); 
}

Мой вопрос: подскажите новичку, возможно вся конструкция не верна, я уже голову сломал попытками.

Answer 1

Нужно явно указать формат ответа от сервера.

Так как в вашем случае json, то нужно его и указать.

$.ajax({
  url: url,
  dataType: 'json', // вот так
  data: data,
  success: callback
});

Подробнее о методе ajax

Справка на русском о параметре dataType

Так же советую после echo json_encode(array("success"=>1)); выполнять принудительное завершение скрипта, вот так:

echo json_encode(array("success"=>1));
die;

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

READ ALSO
SSR в окружении PHP и Vue.js

SSR в окружении PHP и Vue.js

Стоит жирная задача реализовать SSR (Server-Side Rendering) в проекте, но постоянно вылазят разные трудности

110
Отправка GET POST запроса android

Отправка GET POST запроса android

Нужна помощьНе могу за коннектится сервером

113
HQL: Can&#39;t resolve symbol

HQL: Can't resolve symbol

Подскажите пожалуйста, какой синтаксис у HQL запроса, который возвращал бы объекты из базы, при определённом условии

86
Сортировка Comparator по String и int

Сортировка Comparator по String и int

Нужно, чтобы компаратор отсортировал массив по Типу(Type) и Цене(Price)

110