В моем приложении я сильно полагаюсь на JavaScript для улучшения пользовательского интерфейса, но все данные поступают из базы данных и обрабатываются PHP. По умолчанию я использую выражения «эхо» для подстановки необходимых значений «точно вовремя» следующим образом:
var myVariable = <?php echo $myVariableInPHP ?>
Это, однако, не кажется мне очень элегантным, и меня беспокоит стабильность и ремонтопригодность такого кода.
Есть ли у меня какие-то альтернативы?
Для серверной части я использую фреймворк Symfony 1.4 PHP.
Благодаря,
Мой любимый способ:
<?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, будут экранированы и хорошо отформатированы. Использование общего контейнера переменной также предотвращает использование глобального пространства (окна).
Вы можете использовать JSON для этого, это очень просто использовать как в PHP (проверьте json_encode()
), так и JavaScript.
Это безопасно использовать в <script>
-Tags и браузерах, которые понимают JavaScript. Обратите внимание, что функция PHP не кодирует <
и >
.
Некоторые примеры PHP:
$user = (object) array("name"=>"Joseph", "age"=>29, "email"=>"asdf@example.net"); echo '<script type="text/javascript"> var user = '.json_encode($user).'; </script>';
Я бы попытался использовать JSON. Вот ссылка для вас на php.net, объясняющую, как это сделать.
Первое из ваших решений действительно работает, но не рекомендуется смешивать код на стороне клиента с кодом на стороне сервера. Лучше всего поместить javascript в отдельные .js-файлы (в нем нет PHP)
Сначала я бы создал API (написать документацию), например,
GET http://localhost/getProfile?username=$username POST http://localhost/getProfile/$username
Он будет возвращать JSON-объект, используя json_encode. Вы можете использовать json-p для междоменной связи. Тогда, например, из Jquery вы можете легко получить данные.
Таким образом, ваш javascript останется чистым.
Я предпочитаю use_dynamic_javascript()
помощник. «Плохая» вещь заключается в том, что вам нужно немного подумать о том, чтобы разделить шаблон рендеринга и настроить его на отдельные запросы.