Есть ли в JavaScript эквивалент urldecode или html_entity_decode ()? - PullRequest
1 голос
/ 18 ноября 2009

У меня есть ассоциативный массив в php, который я хочу вставить в скрытую форму ввода, чтобы позже я мог получить значения в javascript. Из-за проблем с цитированием мне нужно urlencode json или htmlentity. Однако, как только у меня появится объект в javascript, каков самый простой способ вернуть его на обычный старый json?

ИЛИ есть ли лучший способ подойти к этому вопросу? AJAX кажется здесь излишним - я бы предпочел предварительно заполнить данные на странице, а не настраивать несколько запросов. Я полагаю, что мог бы записать объект php на страницу внутри тега сценария, сгенерированного php, но это выглядит немного грязно, и я не уверен, что [scripts] будет анализироваться во всех возможных ситуациях, где это может быть использовано.

Ответы [ 2 ]

3 голосов
/ 18 ноября 2009

Если вы вставите данные в поле, вы можете использовать decodeURIComponent для декодирования значения. Пример:

decodeURIComponent("%5b'hello'%2c%20'world'%5d"); // ['hello', 'world']

Другой подход может заключаться в том, чтобы встроить объект JSON в элемент <script> в выводе PHP. Вы можете даже пойти так далеко, что сделаете объект JSON аргументом функции, которая хранит его где-то в другом месте.

<script>setupData(<?= toJSON(['hello', 'world']) ?>)</script>

Когда страница загружается, setupData будет вызываться с литералом ['hello', 'world'].

1 голос
/ 18 ноября 2009

О. Я думаю, что я должен был проверить в первую очередь. Я использую додзе, и это просто работает:

PHP:

$arr = array('nyc'=>'big apple', 'boss'=>'big banana', 'lion'=>'big cat');
$json = htmlentities(json_encode($arr));
echo '<input type="hidden" id="myHidden" value="' . $json . '" />';

Javascript:

var raw = dojo.byId('myHidden').value;
var arr = dojo.fromJson(raw);
for (var i in arr) {
    console.log(i + " => " + arr[i]);
}

[смущенная улыбка]

...