将PHP变量传递给Javascript的最佳方法是什么?

时间:2010-05-04 14:15:49

标签: php javascript variables

我目前在隐藏的输入字段中回显某些变量,并在需要时用Javascript读取它们。

我和一位同事正在考虑用PHP生成一个额外的Javascript文件,该文件只包含Javascript的所有变量。这种方式变量已经存在,HTML中没有额外的代码。

将变量从PHP传递到Javascript有什么好方法?我们的解决方案如何发声?

4 个答案:

答案 0 :(得分:25)

一般数据传递

常用的JavaScript交换格式为JSON,使用json_encode。像这样的PHP文件:

<?php
    $data = array("test" => "var", "intvalue" => 1);
    echo json_encode($data);
?>
然后

返回一个JavaScript对象文字,如下所示:

{
    "test" : "var",
    "intvalue" : 1
}

您可以直接将其回显到页面上的JavaScript变量中,例如:

var data = <?php echo json_encode($data)?>;

...或通过Ajax请求(例如使用jQuery's getJSON)。

输出到标签上的属性

如果您只需要将字符串输出到标签上的属性,请使用htmlspecialchars。假设一个变量:

<?php
$nifty = "I'm the nifty attribute value with both \"double\" and 'single' quotes in it.";
?>

...你可以像这样输出:

<div data-nifty-attr="<?php echo htmlspecialchars($nifty)?>">...</div>

...或者如果您使用短标签:

<div data-nifty-attr="<?= htmlspecialchars($nifty)?>">...</div>

答案 1 :(得分:5)

<?php
  $my_php_var = array(..... big, complex structure.....);
?>
<script type="text/javascript">
  my_js_var = <?=json_encode ($my_php_var)?>;
</script>

答案 2 :(得分:3)

我用它在HTML的头部回显它们。看起来足够干净以满足我的需求:)

答案 3 :(得分:2)

有三种方法可以做到:

  • 直接将它们回放到javascript源代码中: <?echo "var user = '$user';";?>。工作,但它很乱。
  • 通过ajax请求传递它们。这是你可以接近原生变量传递的最接近的,但缺点是需要额外的HTTP请求。
  • 你在做什么,通过生成隐藏的表单字段然后阅读它们来传递它们。