Я пытаюсь передать mulitidimensional массив Javascript на другую страницу моего сайта:
использование JSON.stringify в массиве
присвоение результирующего значения полю ввода
размещение этого поля на второй странице
используя json_decode по опубликованному значению
затем var_dump для тестирования
(echo'ing размещенную переменную непосредственно, чтобы увидеть, не получилось ли вообще)
Javascript на первой странице:
var JSONstr = JSON.stringify(fullInfoArray); document.getElementById('JSONfullInfoArray').value= JSONstr;
php на второй странице:
$data = json_decode($_POST["JSONfullInfoArray"]); var_dump($data); echo($_POST["JSONfullInfoArray"]);
Эхо работает отлично, но var_dump возвращает NULL
Что я сделал не так?
Это меня устроило:
$postedData = $_POST["JSONfullInfoArray"]; $tempData = str_replace("\\", "",$postedData); $cleanData = json_decode($tempData); var_dump($cleanData);
Я не уверен, почему, но сообщение проходило с кучей символов «\», разделяющих каждую переменную в строке
json_last_error()
это с помощью json_last_error()
как было сказано Бартом, который вернул JSON_ERROR_SYNTAX
Вам нужно будет проверить содержимое $_POST["JSONfullInfoArray"]
. Если что-то не разбирается, json_decode
просто вернет null
. Это не очень полезно, поэтому, когда возвращается null
вы должны проверить json_last_error()
чтобы получить больше информации о том, что пошло не так.
Когда вы используете JSON stringify, сначала используйте html_entity_decode перед json_decode.
$tempData = html_entity_decode($tempData); $cleanData = json_decode($tempData);
stripslashes(htmlspecialchars(JSON_DATA))
Ни один из других ответов не работал в моем случае, скорее всего, потому, что массив JSON содержал специальные символы. Что исправлено для меня:
Javascript (добавлен encodeURIComponent)
var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray)); document.getElementById('JSONfullInfoArray').value = JSONstr;
PHP (без изменений)
$data = json_decode($_POST["JSONfullInfoArray"]); var_dump($data); echo($_POST["JSONfullInfoArray"]);
Проверяются как echo, так и var_dump, чтобы нормально работать с образцом из более чем 2000 введенных пользователем наборов данных, которые включали поле URL и длинное текстовое поле и возвращали NULL в var_dump для подмножества, содержащего URL-адреса с символами ?&#
.