@Pestrich

Как получить JSON-массив с кодом статуса после запроса к БД?

Есть кнопка при нажатии на которую отправляется запрос к БД (записываются данные в таблицу). Нужно чтобы в случае успешного завершения запроса возвращался JSON-массив с кодом статуса «1» и текстом сообщения «Товар добавлен». В случае ошибки - возвращается код статуса «0» и текстом сообщения ошибки. Текст сообщения из JSON нужно показать рядом с кнопкой в виде подсказки.
JS код:
$(document).ready(function() {
	$('#buy').on('click', myAJAX);
});

function myAJAX() {
	$.ajax({
		url : "add_to_cart.php",
		type : "GET",
		data : { "count" : $('#col').val() },
		success : function(data) {
			console.log(data);
		}
	});
}

Add_to_cart.php:
<?php
	/* Подключение к БД */
	require_once("db.php"); 

	if (mysqli_connect_errno()) {
	echo "Подключение невозможно: ".mysqli_connect_error();
	} else {
		echo "БД подключена <br />";
	}

	$count = $_GET['count'];
	$user_ip = $_SERVER['REMOTE_ADDR'];
	$date = date('Y-m-d H:i:s');

	/* Заполнение БД */
	$sql = "INSERT INTO `orders` (`order_id`, `order_date`, `ip`, `product_count`) VALUES (NULL, '$date', '$user_ip', '$count')";
	if (mysqli_query($conn, $sql)) {
	    echo "New record created successfully";
	    $arr = array('status code' => 1, 'message' => 'Item added to cart');
		echo json_encode($arr);
	} else {
	    echo "Error: " . $sql . "<br>" . mysqli_error($conn);
	    $arr = array('status code' => 0, 'message' => 'Error');
		echo json_encode($arr);
	}

В консоли браузера приходят нужные массивы, но я почему-то думаю что это неверно, а также не знаю как вывести подсказку. Как это все правильно реализовать?
  • Вопрос задан
  • 274 просмотра
Решения вопроса 1
@DanKud
Добавьте динамический блок возле кнопки для отображения статуса. Например добавьте возле кнопки <span class="status"></span> и допишите в AJAX-запрос:

.....
function myAJAX() {
    $.ajax({
        url : "add_to_cart.php",
        type : "GET",
        data : { "count" : $('#col').val() },
        dataType: 'json', /* сразу же даем понять в запросе, что принимаем JSON, чтобы не декодировать отдельно */
        success : function(data) {
            console.log(data);
            $('.status').html(data.message); /* добавляем текст статуса в элемент .status */
        }
    });
}

Ну и на счет PHP-кода он у вас конечно во многих местах крайне невалидный. Перепишите для начала хотя бы так:

require_once("db.php"); 

/* во-первых для чего вы везде делаете вывод данных через echo если у вас это будет
просто скрипт, который должен отдавать статус добавления товара в JSON-формате */

header('Content-Type: application/json'); /* даем понять в заголовках, что тип данных у нас JSON */

if (mysqli_connect_errno()) {
    $arr = array('message' => 'Error');
    echo json_encode($arr);
    exit(); /* отдаем ошибку подключения к базе данных и завершаем выполнение скрипта */   
}

/* принимать для записи в базу данных значения из $_GET без дополнительной фильтрации небезопасно
проще говоря так делать нельзя, хоть это конечно и будет работать */
$count = (is_numeric($_GET['count'])) ? intval($_GET['count']) : false; /* проверяем если нам отправили не число, а строку, то возвращаем false, если число то обязательно округляем до целого */
if (!$count) { /* соответственно если нам отправили некорректное значением то отдаем ошибку и завершаем выполнение скрипта */  
    $arr('message' => 'Error');
    echo json_encode($arr);
    exit();
}
$user_ip = $_SERVER['REMOTE_ADDR'];
$date = date('Y-m-d H:i:s');

$sql = "INSERT INTO `orders` (`order_id`, `order_date`, `ip`, `product_count`) VALUES (NULL, '$date', '$user_ip', '$count')";
/* не используйте в массиве значения ключей с пробелами: status code => status_code */
if (mysqli_query($conn, $sql)) {
    $arr = array('status_code' => 1, 'message' => 'Item added to cart');
} else {
    $arr = array('status_code' => 0, 'message' => 'Error');
}
echo json_encode($arr);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@morricone85
перед echo json_encode($arr);
выводить ничего нельзя, так что, echo "New record created successfully" и т.п. нужно убрать;

в $.ajax добавить - dataType: 'json'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы