Подтвердить что ты не робот

Каков самый безопасный способ передачи аргументов с серверного PHP на клиентский JavaScript

В моем приложении я сильно полагаюсь на JavaScript для улучшения пользовательского интерфейса, но все данные поступают из базы данных и обрабатываются PHP. По умолчанию я использую выражения "эхо" для подстановки необходимых значений "точно вовремя" следующим образом:

var myVariable = <?php echo $myVariableInPHP ?>

Это, однако, не кажется мне очень элегантным, и меня беспокоит стабильность и ремонтопригодность такого кода.

Есть ли у меня какие-то альтернативы?

Для серверной части я использую фреймворк Symfony 1.4 PHP.

Спасибо,

4b9b3361

Ответ 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(). "Плохая" вещь в этом заключается в том, что вам нужно немного подумать о том, чтобы раскрыть сам шаблон рендеринга и настроить его на отдельные запросы.