Ошибка SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 21 of the JSON data
JavaScript + JSON
let userPassObj = {
"login" : document.getElementById('user-input').value,
"password" : document.getElementById('pass-input').value
}
let userPassParams = JSON.stringify(userPassObj)
xhr = new XMLHttpRequest()
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
let wer = document.getElementById('wer') // Просто div на странице
wer.innerHTML = JSON.parse(this.response)
}
}
xhr.open("POST", "/myProjects/todolist/php/checkUser.php", true)
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded")
xhr.send("x=" + userPassParams);
PHP
<?php
// Подключаемся к базе данных
require_once 'login.php';
header("Content-Type: application/json; charset=UTF-8");
$json = json_decode($_POST["x"], false);
if ($conn = mysqli_connect($hn, $un, $pw, $db)) {
if ($result = mysqli_query($conn, 'SELECT `username` FROM users')) {
while ($row = mysqli_fetch_assoc($result)) {
echo json_encode($row);
}
mysqli_free_result($result);
}
mysqli_close($conn);
}
else
{
echo 'Не удалось установить подключение к базе данных';
}
?>
Открываю инструмент разработчика в Mozilla Firefox, вкладку "Сеть", в ответе запроса получаю ошибку:
SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 21 of the JSON data
Я понимаю, что ошибка заключена именно в пробеле между объектами. Интересует, как его исправить?
Ответы (1 шт):
Автор решения: Dmitry
→ Ссылка
Если правильно понял работу скрипта, то...
В цикле while Вы выводите две несвязных JSON-строки. Вместо этого, поместите их в массив и выведите их уже после цикла:
PHP:
<?php
// Подключаемся к базе данных
require_once 'login.php';
header("Content-Type: application/json; charset=UTF-8");
$json = json_decode($_POST["x"], false);
$output = array();
if ($conn = mysqli_connect($hn, $un, $pw, $db)) {
if ($result = mysqli_query($conn, 'SELECT `username` FROM users')) {
while ($row = mysqli_fetch_assoc($result)) {
$output[] = $row; // собираем данные в массив
}
mysqli_free_result($result);
echo json_encode($output); // выводим, закодировав в JSON-строку
}
mysqli_close($conn);
}
else
{
echo 'Не удалось установить подключение к базе данных';
}
?>
