Передача JSON-кодированной переменной из PHP в Javascript через POST

У меня есть многомерный массив, который я хочу отправить скрипту PHP с помощью Javascript, который анализирует данные JSON и записывает его на Google Maps. Я пытаюсь имитировать его с помощью форм:

<?php $jsontest = array( 0 => array( 'plate_no' => 'abc111', 'longlat' => array(121.003895,14.631563), 'info' => 'first item' ), 1 => array( 'plate_no' => 'abc222', 'longlat' => array(121.103895,14.731563), 'info' => 'second item' ) ); $jsonarray = json_encode($jsontest); ?> <form action="json-target.php" method="post" accept-charset="utf-8"> <input type="hidden" name="jsonarray" value="<?php echo $jsonarray; ?>" id="jsonarray"> <p><input type="submit" value="Continue &rarr;"></p> </form> 

json-target.php выглядит так:

 <?php print "The value of \$_POST is "; print_r($_POST); ?> 

И выход $_POST – это Array ( [jsonarray] => [{ ) . Я хотел передать содержимое переменной $jsonarray в функцию Javascript (см. Обновление ниже).

UPDATE: У меня также есть простой Javascript, который должен анализировать значение, полученное от $_POST и отправлять значение через alert() :

 <script src="/js/json2.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript" charset="utf-8"> var json = JSON.parse(<?php echo $_POST['jsonarray'] ?>); for (var i = 0; i < json.length; i++) { alert(json[i]); } </script> 

Но результат искажается символами обратной косой черты.

 var json = JSON.parse([{\"plate_no\":\"abc111\",\"longlat\":[121.003895,14.631563],\"info\":\"first item\"},{\"plate_no\":\"abc222\",\"longlat\":[121.103895,14.731563],\"info\":\"second item\"}]); 

Что это лучший способ сделать это?

Кодировка JSON широко использует кавычки. Просто выведя кодированную строку JSON в свой атрибут value HTML, кавычки будут мешать разметке. Они должны быть экранированы, чтобы помещаться в HTML. Попробуй это:

 <input type="hidden" name="jsonarray" value="<?php echo htmlspecialchars($jsonarray,ENT_QUOTES); ?>" id="jsonarray"> 

Изменить. В ответ на ваше обновление я не уверен, что ваш JSON.parse должен делать. Все, что закодировано с помощью json_encode() в PHP, является технически корректным объектом Javascript и не нуждается в дальнейшем анализе. Если бы у меня был объект с именем $obj с именем name 'hello', я мог бы сделать это:

 <script type="text/javascript"> var o = <?php echo json_encode($obj); ?>; alert(o.name); </script> 

и получите предупреждение, говорящее «привет». Результат json_encode – отлично подходящий объект javascript.

Тот факт, что вывод вашего массива $_POST был экранирован с помощью косой черты, заставляет меня думать, что, возможно, ваша директива magic_quotes_gpc настроена на включение. Если это так, вам нужно будет stripslashes() переменные $ _POST с помощью stripslashes() .

Взял меня, чтобы найти ответ. Пытаться:

 var json = JSON.parse(<?php echo stripslashes($_POST['jsonarray']) ?>); 

var json = JSON.parse ($ ('# jsonarray'). val ()); alert (json.plate_no [0]);