【问题标题】:Access PHP var from external javascript file从外部 javascript 文件访问 PHP var
【发布时间】:2011-02-25 02:37:06
【问题描述】:

我可以像这样使用 Javascript 访问 PHP var:

<?php
    $fruit = "apple";
    $color = "red";
?>

<script type="text/javascript">
    alert("fruit: " + "<?php echo $fruit; ?>"); // or shortcut "<?= $fruit ?>"
</script>

但是如果我想使用外部的 JS 文件怎么办:

<script type="text/javascript" src="externaljs.js"></script>

externaljs.js:

alert("color: " + "<?php echo $color; ?>");

【问题讨论】:

  • 是的,你可以。看我的例子。

标签: php javascript variables external


【解决方案1】:

您并没有真正访问它,而是在您提供页面时将其插入到 javascript 代码中。

但是,如果您的其他 javascript 不是来自外部来源,您可以执行以下操作:

<?php
    $color = "Red";
?>
<script type="text/javascript">var color = "<?= $color ?>";</script>
<script type="text/javascript" src="file.js"></script>

然后在 file.js 中像这样使用颜色:

alert("color: " + color);

【讨论】:

  • 这正是我刚刚想出的。以及我所追求的。为唐 +1
  • 应该是 var color = "= $color ?>";
  • 抱歉,感谢 Mark L,我已经在帖子中更正了。
  • 如果不是因为它在较低的脚本标签中创建了一个全局变量,我会对这个解决方案感到满意。
  • 一个很棒的概念,但请不要使用全局变量!还有@Adam Joseph Looze - 在声明javascript变量时使用“var”关键字始终是最佳实践。没有“var”,变量将自动是全局的(附加到窗口对象)。
【解决方案2】:

您也可以像这样在 Javascript 中访问 php 脚本中的数据(我将在这里使用 jQuery)

像这样在你的 php 文件中创建输入隐藏字段

<input type="hidden" id="myPhpValue" value="<?php echo $myPhpValue ?>" />

在您的 javascript 文件中:

var myPhpValue = $("#myPhpValue").val();
//From here you can the whaterver you like with you js Value
if(myPhpValue != ''){
//Do something here
}

这也可以完成这项工作:)

【讨论】:

    【解决方案3】:

    我所看到的是让 .js 文件通过 php 解释器运行。 我不能推荐。

    我推荐的是通过 AJAX 获取值并让 PHP 文件将值返回到 JS 文件。这是一种更清洁的方法。

    【讨论】:

    • 太棒了!带有实际代码的示例将提供 100000 字。请张贴代码!
    • @Ólafur Waage 你能添加代码解释怎么做吗?
    • 通过 ajax 获取值是昂贵的。如果您一开始只需要一次来自服务器的数据,则无需这样做。
    【解决方案4】:

    首先你必须明白没有程序实际上可以访问其他程序的变量。

    当您意识到这一点时,剩下的就很简单了。
    你可以在主文件中设置一个 js 变量,然后包含你的外部 js,或者使这个外部 js 动态,也由 PHP 生成

    【讨论】:

    • 感谢您的澄清。我使用了您的第一个解决方案。 和在 externaljs.js 中,我使用 alert(_fruit);
    【解决方案5】:

    您可能想要的是异步 JavaScript 和 XML (AJAX):http://www.w3schools.com/ajax/default.aspa

    基本上,想象一下能够将消息从客户端 JavaScript 发送到服务器上的 PHP 脚本。在您提供的示例(externaljs.js)中,您将让脚本通过 HTTP 询问服务器 $color 是什么。您还可以将脚本标记指向生成所需 JavaScript 的 PHP 脚本。这取决于您需要做什么。

    对污点检查、数据验证和安全性有一定的了解会有所帮助;)

    【讨论】:

      【解决方案6】:

      正如其他人所说,javascript 无法访问 php 变量。但是,它确实可以访问 DOM。因此,您可以使用 php 为某些页面元素添加属性。然后你可以使用 javascript 访问这些属性。

      例如&lt;div id='apple' class='red'&gt; 完全可用于 javascript

      【讨论】:

      • 请原谅我对 Javascript/jQuery 的理解不佳,但是不能使用数据类型吗?
        然后通过数据选择器 $('[data-color]').val();或类似的东西?
      • @dj.cowan 是的,现在使用数据类型将是首选方法。但是您仍然无法直接访问 php 变量。您只能访问它们在生成 html 时保存的值。
      【解决方案7】:

      Don 解决方案很好,此外,如果您想在外部 javascipt 中使用 php 数组,这可以帮助您:

      PHP:

      <?php
          $my_php_array = [];
      ?>     
      

      HTML:

      <script type="text/javascript"> var my_js_array = <?php echo json_encode($my_php_array);?> ; </script>
      <script src = "../public/js/my-external-js.js"></script>
      

      Javasript:(您现在可以像使用普通 Javascript 数组一样使用数组)

       my_js_array[0] 
       my_js_array.length
      

      【讨论】:

        【解决方案8】:

        externaljs.js 是一个静态文件。当然它不能访问 PHP 数据。将 PHP 数据传递给 js 文件的唯一方法是通过在 PHP 脚本中写入文件来物理更改文件,尽管这充其量是一个混乱的解决方案。

        编辑以回应 Ólafur Waage 的回答:我想写入 js 文件不是 唯一 方式。我从未想过通过 PHP 解释器传递 js(有充分的理由)。

        【讨论】:

          【解决方案9】:
          <script type="text/javascript" src="externaljs.js"></script>
          

          你可以改成

          <script type="text/javascript" src="externaljs.php"></script>
          

          而 PHP 脚本可以像这样编写 JavaScript:

          <?php
          $fruit = "apple";
          echo 'var fruit = '.json_encode($fruit);
          ...
          

          虽然像 Sepehr Lajevardi 所说的那样使用 AJAX 会更干净

          【讨论】:

          • 我认为应该添加一个具有正确 Content-type 的标题。
          • 经典 JavaScript 文件没有,它们是纯文本文件,引用其 URL 的标签定义了它们在浏览器中的使用类型。
          【解决方案10】:

          2017-2018及以上解决方案:

          由于还没有人提出来,我想也没有人想过将函数 base64_encodejson_encode 组合起来,你甚至可以发送这样的 PHP Array 变量:

          index.php

          <?php
                $string = "hello";
                $array = ['hi', 'how', 'are', 'you'];
                $array = base64_encode(json_encode($array));
          

          然后您可以使用查询字符串的参数加载所需的 js 文件,如下所示:

          echo '&lt;script type="text/javascript" src="js/main.php?string='.$string.'&amp;array='.$array.'"&gt;';

          然后js/main.php 将如下所示。你可以这样测试你的变量:

          js/main.php

              <?php
              if ($_GET['string']) {
                  $a = $_GET['string'];
              }
              if ($_GET['array']) {
                  $b = $_GET['array'];
              }
              $b = json_decode(base64_decode($b));
          
              echo 'alert("String $a: + '.$a.'");';
              echo 'alert("First key of Array $array: + '.$b[0].'");';
              exit();
              ?>
          

          当您打开index.php 时,将输出以下内容。所以你看,你没有打开js/main.php,你仍然可以从中获得javascript功能。

          【讨论】:

            【解决方案11】:

            你不能这样做并且不要尝试,因为这不是推荐的方法,但是你可以将 php 变量作为函数参数传递给用外部 js 编写的函数

            【讨论】:

            • 除非你能提供一个例子,否则这将是一个更好的评论。
            【解决方案12】:

            您可以像其他任何事情一样include()他们:

            <?php
                $fruit = "apple";
                $color = "red";
            ?>
            
            <script type="text/javascript">
                <?php include('/path/to/your/externaljs.js'); ?>
            </script>
            

            这基本上会将外部文件呈现为内联 js。这里的主要缺点是您失去了浏览器缓存的潜在性能优势。另一方面,这比在 javascript 中重新声明 php 变量要容易得多。

            【讨论】:

              猜你喜欢
              相关资源
              最近更新 更多
              热门标签