在我的应用程序中,我非常依赖JavaScript来增强用户界面,但所有数据都来自数据库并由PHP处理。默认情况下,我使用'echo'语句来“及时”替换所需的值,如下所示:
var myVariable = <?php echo $myVariableInPHP ?>
然而,这并不会让我感到非常优雅,我担心这些代码的稳定性和可维护性。
我在这里有其他选择吗?
对于服务器端,我使用的是Symfony 1.4 PHP框架。
谢谢,
答案 0 :(得分:38)
我最喜欢的方式是:
<?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的值被转义并格式正确。使用公共变量容器还可以防止过度使用全局空间(窗口)。
答案 1 :(得分:4)
您可能希望使用JSON,在PHP(检查json_encode()
)和JavaScript中使用它非常简单。
在<script>
内使用它是安全的 - 了解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>';
答案 2 :(得分:2)
我尝试使用JSON。这是一个链接,您可以通过php.net解释如何执行此操作。
答案 3 :(得分:1)
您的第一个解决方案确实有效,但将客户端代码与服务器端代码混合起来并不是一个好习惯。最好将javascript放在单独的.js文件中(不包含PHP)
我首先要创建一个API(编写文档),例如
GET
http://localhost/getProfile?username=$username
POST
http://localhost/getProfile/$username
它将使用json_encode返回JSON对象。您可以使用json-p进行跨域通信。然后从例如Jquery开始,您可以轻松获取数据。
这样你的javascript就会保持干净。
答案 4 :(得分:0)
我更喜欢use_dynamic_javascript()
助手。关于它的“糟糕”的事情是你必须多考虑分割渲染模板本身并将其配置为单独的请求。