SyntaxError: JSON.parse: unexpected end of data at line 1 column 1 of the JSON data
Я устал, помогите, пожалуйста. У меня на локалхосте я делаю ajax запрос на php сервер, мой js проверял во вкладке, отправляет данные точно, но принять ответ от сервера я не могу, тк ответа по какой-то причине нет.(ниже показываю, что не могу отправить с сервера даже статичные данные).
//php server
$arrayRes = ["nya","nya","nya",];
if (isset($_POST["hidden"])) {
echo $arrayRes;
}
//js
let response = await fetch('/store.php', {
method: "POST",
body: new FormData(form),
});
let userComment = await response.json();
----------------- 500 internal server error исходные файлы:
///store.php
Прошу,я уже отчаялся я очень и очень много времени потратил на это но так и не смог пофиксить, хотя изначально статичные данные отправлять получалось. Добавил чуть кода и всё нафиг поломалось, как думаете, что не так?
Ответы (2 шт):
Во первых echo $arrayRes; это уже не верно, так как echo выводит строки на экран, а $arrayRes это массив, а не строка, для вывода массива используйте print_r. Во вторых массив, который может быть преобразован в JSON, должен быть ассоциативным, например
$arrayRes = array(["key" => "value", "key" => "nya"]),
хотя можно и обычный массив преобразовать, тогда ключи будут нумероваться с 0 и т.д. В третьих чтобы вывести массив в виде JSON строки нужно использовать функцию json_encode() примерно так echo(json_encode($arrayRes, JSON_UNESCAPED_UNICODE));. Если хотите могу полный пример написать, только с использованием jQuery $.ajax, а не await fetch, так как даже не знаю что это)
Как уже корректно Вам сообщил Dmitriy Saxarov, echo выводит содержимое строк.
Подробнее Вы можете почитать Про echo
Для того, чтобы вывести массив для отображения, Вам необходимо использовать print_r($arrayRes); или var_dump
Они смогут вывести для Вас информацию в формате массива (Просто для отображения).
Чуть больше информации о print_r и var_dump Вы можете почитать Тут
В случае, когда Вы хотите передать данные через fetch, Вам в первую очередь необходимо набрать информационную базу о том, что же такое он собой представляет и каким образом работает.
Согласитесь, что когда понимаешь, как именно работает тот или иной код - гораздо проще становится использовать его в дальнейшем.
Подробнее про Fetch Вы можете почитать по ссылке.
Ниже указан рабочий код по использованию передачи данных из формы в файл php при помощи fetch
Первый файл:
<?php
?>
<form>
<input type="text" name="name" id="123">
<button formmethod="post">Submit</button>
</form>
<script>
const form = document.querySelector('form'); // в js получаем параметры данных в form
form.addEventListener('submit', evt => { // Отслеживаем нажатие кнопки, чтобы выполнить наши действия. (Необходимо уточнить, что отслеживать можно разные события, для большей информации почитайте про `addEventListener` в `javascript`
evt.preventDefault(); // Убираем автоматическую отправку формы `submit`
fetch('form.php', { // инициируем отправку формы данных в файл `form.php`
method: 'POST', // Указываем метод отправки данных
body: new FormData(form) // Формируем форму в тело отправляемых данных
}).then(function(response){ // Then указывает последовательность действий, в данном случае ожидание получения ответа от скрипта из файла `form.php`
console.log(response) // Выводим данные в консоль (В хроме к примеру f12) Данный вид просмотра выполняемых данных доступен в любом браузере.
}).catch(function(error){ // Отлавливаем ошибки, если они есть.
console.log(error); // Так же выводим их в консоль.
});
})
</script>
Чуть подробнее о том, что делает данный код постарался расписать в комментариях.
Второй файл (Который получает данные и их обрабатывает).
Как мы уже видели ранее - называется он form.php.
Это тот файл, который при получении данных через fetch обрабатывает их и возвращает выводимый результат.
<?php
$method = $_SERVER['REQUEST_METHOD']; // Получаем данные, сформированные через fetch
print_r($_POST); // Для демонстрации выводим их на экран.(Можно скрыть данный параметр).
// Далее чтобы проверить сохранение этих данных и то, что они обрабатываются корректно, мы сохраняем их в файл.
$file = 'text.txt'; // Указываем название файла. (Если файл лежит в другое директории, то указываем путь к файлу.
$current = file_get_contents($file); // Получаем данные из файла при необходимости
file_put_contents($file, $_POST); // Сохраняем полученные из `fetch` данные в файл
Теперь постараюсь показать каким образом это функционирует:
Наш первый файл:

Второй файл с названием form.php, в котором мы получаем и обрабатываем данные:

Пример ввода данных в форму php:

Затем, чтобы убедиться, что данные получены и сохранены корректно, мы можем посмотреть наш файл txt. (Необходимо уточнить, что Вы можете не сохранять данные в текстовый файл, это сделано исключительно для демонстрации, а обрабатывать их необходимым образом и возвращать в качестве ответа в response в основном Вашем файле)
В случае, если Вы всё сделали корректно, то данные у Вас успешно запишутся в файл, что Вы сможете воочию наблюдать.
В остальном - Вы можете использовать fetch в практически в любых видах передачи данных, которые Вам необходимы.
Удачи Вам в Вашем проекте.

