Вот как я получил свой php-массив в javascript
echo 'var daysofweek = '.json_encode($daysofweek).';';
Теперь я знаю, что json_decode может делать обратное, но проблема в том, что я не знаю синтаксиса для этого.
Я пытался:
<script> var array_days = new Array(); array_days[] = "psdfo"; array_days[] = "bsdf"; <?php $array_days = json_decode(?>array_days<?php);?> </script>
да неубедительно.
Я забыл упомянуть, что хочу отправить массив через сообщение, имея всю мою информацию о всех значениях форм, динамически созданных javascript. В противном случае я не знаю, какое имя = "" искать, поскольку это будет определено пользователем. Если у кого-то другого нет альтернативного решения …
<script> var array_days = new Array(); array_days[] = "psdfo"; array_days[] = "bsdf"; <?php $array_days = json_decode(?>array_days<?php);?> </script>
Я не знаю в этой части … это javascript? Если это так, вам нужно использовать JSON Parser, например JSON2.js https://github.com/douglascrockford/JSON-js
этот файл создает Javascript JSON Object, который позволяет вам разбирать строку JSON для объекта Javascript. (вы всегда можете использовать eval (), но это не предотвратит возможный вредоносный код …) или наоборот … из преобразования Javascript Object в строку JSON.
После преобразования в строку JSON вам просто нужно отправить данные через AJAX в файл PHP, например:
var data = { key: value, key2: value2 }, JSON = JSON.stringify(data); $.ajax({ url: 'php_file.php', type: 'POST', data: JSON, success: function(data){ alert(data) } });
(Я использую jQuery для сохранения некоторых строк …)
Тогда на php_file.php у вас будет что-то вроде этого:
<?php $json = json_decode($_POST['data']); foreach($json as $value){ //Do something with it! } ?>
PHP является предварительным процессором и не может делать то, что вы просите. Вам понадобится PHP-движок для обработки javascript на странице. json_decode предназначен для декодирования строки json в PHP.
Для этого вам нужно передать массив javascript в PHP-скрипт, используя что-то вроде Ajax, чтобы ваш PHP-скрипт мог обрабатывать его в любом случае, и вам нужно было передать результат на ваш код Javascript.
Да, как сказал Wajiw, PHP является предварительным процессором. Но я думаю, что это возможно с помощью ajaxed запроса. Отправьте массив Javascript в качестве аргумента на другую страницу и обработайте его с помощью php и снова отобразите результаты.
Примечание: Никогда не пробовал это 🙂 Спасибо
Прежде всего:
array_days[] = "psdfo"; array_days[] = "bsdf";
Эти строки действительны PHP, но недействительны JavaScript. Правильный эквивалент:
array_days.push("psdfo"); array_days.push("bsdf");
On для передачи результирующего массива строк (это то, что я предполагаю) для PHP. Чтобы отправить его в виде данных формы в чистом JS, мы можем создавать скрытые элементы ввода при отправке формы ( попробуйте ):
<form id="myform" method="POST" action="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi"> <input type="submit" value="Submit"> </form> <script> document.getElementById('myform').onsubmit = function() { for(var i = 0; i < array_days.length; ++i) { var inputElement = document.createElement('input'); inputElement.type = 'hidden'; inputElement.name = 'array_days[]'; inputElement.value = array_days[i]; this.appendChild(inputElement); } }; </script>
PHP интерпретирует каждый вход, имеющий имя array_days[]
как элемент массива $_POST['array_days']
. Например, вы можете получить доступ к $_POST['array_days'][0]
в PHP.
Для AJAX jQuery 1.4 и выше автоматически достигают этого эффекта, когда вы передаете массив как параметр данных в $.ajax
.
Почему бы не json_decode()
? Ответ заключается в том, что более старые версии веб-браузеров не поддерживают функцию JavaScript JSON.stringify()
которая эквивалентна json_encode()
PHP, хотя есть библиотека для добавления поддержки . Можно было бы рассмотреть его для более сложного случая, но для такого простого случая это не обязательно.