【问题标题】:PHP variable inside a js file [duplicate]js文件中的PHP变量[重复]
【发布时间】:2011-05-29 22:35:55
【问题描述】:

可能重复:
Best way to transfer an array between PHP and Javascript

如何将 PHP 变量的值放入 Javascript 变量中? 这就是我现在在 js 文件中的内容:

test=<?php echo $country; ?>;

【问题讨论】:

  • var jsvariable = '&lt;?php echo $phpvariable; ?&gt;';var jsvariable = &lt;?php echo $phpvariable; ?&gt;; 如果是整数值
  • 您必须告诉服务器将您的文件解析为PHP,并告诉客户端将其解析为JS。

标签: php javascript


【解决方案1】:

在将变量传递给 JavaScript 之前,不要忘记正确转义变量。为此请使用json_encode(),因为它以适合与 JavaScript 一起使用的方式对您的值进行转义和编码:

test=<?php echo json_encode($country) ?>;

永远不要简单地发送未编码的变量,因为它可能会破坏事情,或者更糟糕的是,如果值来自不受信任的来源,则会危及您的安全。

此外,如果您希望能够在其中插入动态 PHP 代码,请将您的文件重命名为 .php 而不是 .js

【讨论】:

    【解决方案2】:

    请记住,浏览器并不关心服务器端 (PHP) 代码是什么。它只关心渲染代码(Javascript 和 HTML)的样子。所以你的PHP

    test=<?php echo $country; ?>;
    

    会出现这样的结果,假设 $country 是一个字符串:

    test=USA
    

    这是有效的 Javascript,但它没有将 test 设置为具有值 USA。它将test 设置为变量USA 的值,几乎可以肯定是undefined。您需要使用引号来制作 Javascript 字符串文字:

    test="<?php echo $country; ?>";
    

    这将被渲染为:

    test="USA";
    

    并且会做你所期望的。


    我现在看到您提到该文件是一个 js 文件。我在上面假设它是一个标准的 PHP-with-HTML 文件。事实上,以上所有内容仍然有效。但是,将 PHP 脚本作为 Javascript 提供服务只是有点棘手。

    首先,将您的文件命名为filename.php(或您想要的任何其他名称)。到目前为止,这是让网络服务器知道用 PHP 解析它的最简单方法。然后使用如下指令让浏览器知道该文件是Javascript内容:

    header('Content-Type', 'text/javascript');
    

    在将任何内容发送到浏览器之前,将其放在文件的最顶部。然后,您可以根据需要包含 PHP 变量。

    【讨论】:

      【解决方案3】:

      首先,确保你理解这一点,因为我看到很多初学者在服务器端脚本和客户端脚本之间的区别上磕磕绊绊,javascript 是客户端脚本语言,而 PHP 是服务器端。如果你理解这一点,你基本上可以跳过这一段。当用户请求一个页面时,例如 mysite.com/whatever.php,请求被发送到服务器。因为用户请求 PHP 文件,服务器知道它应该在将文件发送给用户之前对其进行解析。解析文件时,服务器启动 n HTML 模式,这意味着它读取的所有文本都直接发送给用户。从 php 遇到文件结尾的那一刻起。当到达文件末尾时,它将输出发送给用户。此输出可能在其 HTML 中包含脚本标记。这些javascript的和平将在浏览器与HTML一起显示为红色时执行。

      但是,外部 javascript 文件不需要具有 .js 扩展名,就像 css 一样。因此,您也可以制作一个输出 js 的 php 文件,并按照之前建议的答案之一进行操作,因此将此 js 代码放在 .php 文件中:

      var somevar = <?php echo $var; ?>;
      

      如您所见,在 javascript 中的等号后,将打印 php 变量 $var 的值。因此,当浏览器输出为红色时,该值将分配给名为 somevar 的 js 变量。

      【讨论】:

        【解决方案4】:

        将你的 JS 代码放在一个 .php 文件中,然后像这样尝试:

        <html>
        
        <script language="JavaScript"> 
        function echoSession(num) 
        { 
         window.document.newForm.mybox.value=num; 
         <?PHP echo $VAR ?> 
        }
         </script>
        </html>
        

        关键是你的文件应该是一个PHP文件,让服务器将它解析为php。如果它是 .js 文件,它将不起作用

        【讨论】:

        • 您忘记了&lt;/html&gt; 标签。你也应该给它一个&lt;body&gt;
        • 嗯,这是一个快速的代码 sn-p...这些东西真的很明显,每个人都应该知道它们:P
        • 我也经常忘记事情。只是想我会指出来。 :)
        【解决方案5】:

        为了让您能够在 Javascript 文件中使用标记,您必须:

        1) 修改您的 .htaccess 文件以包含 *.js 作为要通过 PHP 引擎处理的文件的有效扩展名。 (谷歌搜索)

        2) 将 Javascript 文件扩展名从 *.js 更改为 *.php。

        3) 在主 PHP/HTML 文件中声明通过 PHP 设置的变量,而不是在外部 Javascript 文件中。

        【讨论】:

          【解决方案6】:

          有 json_encode (http://php.net/manual/de/function.json-encode.php) 方法可以为 javascript 打印 php 变量。

          test = <?php echo json_encode($value) ?>
          

          即使 $value 是一个数组也可以工作,但在你的情况下,如果它也是一个字符串。

          【讨论】:

            【解决方案7】:

            这是我在处理 js vs php 时经常遇到的问题。随着我的 JS 应用程序变得越来越复杂,我越来越希望将我的所有 JS 保存在库文件中并尽可能保持我的 php 干净。我开始使用的一种解决方案是执行以下操作:

            js文件:

            myNamespace.bootstrap = function( payload ){
              ... 
              // internally boot up all the modules that need 
              // the data, passing it where relavent
              module.load( payload );
            }
            

            php 文件:

              ...
              <script type="text/javascript">
                myNamespace.bootstrap(<?= json_encode($payload_object); ?>);
              </script>
            </body>
            

            这为您的所有脚本提供了一个数据注入点,在您的实际 php.ini 中使用一行 js。应该允许您在 javascript 中轻松管理数据依赖项,因为您可以在 php 中命名它们。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-07-05
              • 2019-11-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-09
              • 2016-09-13
              相关资源
              最近更新 更多