Каков самый безопасный способ передачи аргументов с серверного PHP на клиентский JavaScript
В моем приложении я сильно полагаюсь на JavaScript для улучшения пользовательского интерфейса, но все данные поступают из базы данных и обрабатываются PHP. По умолчанию я использую выражения "эхо" для подстановки необходимых значений "точно вовремя" следующим образом:
var myVariable = <?php echo $myVariableInPHP ?>
Это, однако, не кажется мне очень элегантным, и меня беспокоит стабильность и ремонтопригодность такого кода.
Есть ли у меня какие-то альтернативы?
Для серверной части я использую фреймворк Symfony 1.4 PHP.
Спасибо,
Ответы
Ответ 1
Мой любимый способ:
<?php
$var = array(
'prop1' => 'value1',
'prop2' => 'value2',
// ...
);
?>
<script type="text/javascript">
var varNameSpace = <?php echo json_encode($var); ?>;
alert( varNameSpace.prop1 ); // -> 'value1'
</script>
Использование json_encode()
гарантирует, что значения, переданные в Javascript, будут экранированы и хорошо отформатированы. Использование общего контейнера переменной также предотвращает использование глобального пространства (окна).
Ответ 2
Вы можете использовать JSON для этого, он очень прост в использовании на обоих PHP (проверьте json_encode()
) и JavaScript.
Безопасно использовать в <script>
-Tags и браузерах, которые понимают JavaScript. Обратите внимание, что функция PHP не кодирует <
и >
.
Пример PHP:
$user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"[email protected]");
echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>';
Ответ 3
Я бы попытался использовать JSON. Вот ссылка для вас на php.net, объясняющую, как это сделать.
http://php.net/manual/en/book.json.php
Ответ 4
Сначала ваше решение работает, но не рекомендуется смешивать код на стороне клиента с кодом на стороне сервера. Лучше всего поместить javascript в отдельные .js файлы (в нем нет PHP)
Я бы сначала создал API (написать документацию), например,
GET
http://localhost/getProfile?username=$username
POST
http://localhost/getProfile/$username
Он вернет JSON-объект, используя json_encode. Вы можете использовать json-p для междоменной связи. Затем, например, Jquery, вы можете легко получить данные.
Таким образом, ваш javascript останется чистым.
Ответ 5
Я предпочитаю помощник use_dynamic_javascript()
. "Плохая" вещь в этом заключается в том, что вам нужно немного подумать о том, чтобы раскрыть сам шаблон рендеринга и настроить его на отдельные запросы.