从外部 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 访问这些属性。
例如<div id='apple' class='red'>
完全可用于 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_encode
和 json_encode
组合起来,你甚至可以发送这样的 PHP Array 变量:
index.php
<?php
$string = "hello";
$array = ['hi', 'how', 'are', 'you'];
$array = base64_encode(json_encode($array));
然后您可以使用查询字符串的参数加载所需的 js 文件,如下所示:
echo '<script type="text/javascript" src="js/main.php?string='.$string.'&array='.$array.'">';
然后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的主要内容,如果未能解决你的问题,请参考以下文章