从外部 javascript 文件访问 PHP var

Posted

技术标签:

【中文标题】从外部 javascript 文件访问 PHP var【英文标题】:Access PHP var from external javascript file 【发布时间】: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; ?>");

【问题讨论】:

是的,你可以。看我的例子。 【参考方案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 变量要容易得多。

【讨论】:

以上是关于从外部 javascript 文件访问 PHP var的主要内容,如果未能解决你的问题,请参考以下文章

从外部 JSON 文件构建数组时 V-for 不工作

是否可以从 v-for 循环外部访问 v-for 中变量的值?

从外部文件访问 codeigniter 会话值

又一个秘密如何让浏览器访问最新的js,css等外部引用

从外部 AS 访问 MXML 中定义的元素

从Javascript闭包访问循环中的外部变量[重复]