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

IT技术 php javascript variables
2021-02-22 02:50:33

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

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

将变量从 PHP 传递到 Javascript 的好方法是什么?我们的解决方案听起来如何?

4个回答

一般数据传递

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 的 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 - 如果您想为脚本生成外部文件,这是显而易见的解决方案。但是请注意,您将无法使用 JSON 生成 JavaScript 函数。
2021-04-22 02:50:33
当我把这个 var data = <?php echo json_encode($data)?>; 在 <script> 中,我收到一个语法错误。任何想法为什么?
2021-05-01 02:50:33
是的,JSON 绝对是最简单的。JSON_HEX_TAG如果您将 JSON 写入<script>块,也可以使用该选项,以防止</script>字符串中序列过早结束块(并可能导致 XSS)。
2021-05-02 02:50:33
+1 用于呈现干净的data-属性解决方案。
2021-05-08 02:50:33
谢谢你的好建议!PS 嗨,三年后!
2021-05-09 02:50:33
<?php
  $my_php_var = array(..... big, complex structure.....);
?>
<script type="text/javascript">
  my_js_var = <?=json_encode ($my_php_var)?>;
</script>

我过去常常在 HTML 的开头将它们全部回显。看起来足够干净满足我的需要:)

有 3 种方法可以做到:

  • 直接呼应他们到JavaScript源: <?echo "var user = '$user';";?>有效,但很乱。
  • 通过 ajax 请求传递它们。这是最接近本机变量传递的方法,但缺点是它需要额外的 HTTP 请求。
  • 您在做什么,即通过生成隐藏的表单字段然后读取它们来传递它们。