【问题标题】:What's the best way to pass a PHP variable to Javascript? [duplicate]将 PHP 变量传递给 Javascript 的最佳方法是什么? [复制]
【发布时间】:2010-05-04 14:15:49
【问题描述】:

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

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

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

【问题讨论】:

    标签: php javascript variables


    【解决方案1】:

    一般数据传递

    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 - 如果您正在考虑为脚本生成外部文件,这是显而易见的解决方案。但是请注意,您将无法使用 JSON 生成 JavaScript 函数。
    • 是的,JSON 绝对是最简单的。如果您将 JSON 写入 &lt;script&gt; 块,还可以使用 JSON_HEX_TAG 选项,以防止字符串中的 &lt;/script&gt; 序列过早结束块(并可能导致 XSS)。
    • +1 用于提供干净的data- 属性解决方案。
    • 感谢您的宝贵建议!三年后的 PS 嗨!
    • 当我把这个 var data = ;在
    【解决方案2】:
    <?php
      $my_php_var = array(..... big, complex structure.....);
    ?>
    <script type="text/javascript">
      my_js_var = <?=json_encode ($my_php_var)?>;
    </script>
    

    【讨论】:

      【解决方案3】:

      我习惯于在 HTML 的头部同时回显它们。看起来很干净,可以满足我的需要:)

      【讨论】:

        【解决方案4】:

        有3种方法可以做到:

        • 将它们直接回显到 javascript 源中: &lt;?echo "var user = '$user';";?&gt;。有效,但很混乱。
        • 通过 ajax 请求传递它们。这是最接近原生变量传递的方法,但缺点是需要额外的 HTTP 请求。
        • 您在做什么,通过生成隐藏的表单字段然后读取它们来传递它们。

        【讨论】:

          猜你喜欢
          • 2014-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          • 1970-01-01
          • 2015-04-21
          相关资源
          最近更新 更多