从外部JavaScript文件访问PHP var
我可以像这样使用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; ?>");
您不能真正访问它,当您提供页面时,将其插入到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);
你也可以从Javascript脚本中访问数据(我将在这里使用jQuery)
像这样在你的php文件中创buildinput隐藏字段
<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 }
这也会做这个工作:)
我所看到的是让.js文件通过php解释器运行。 我不能推荐。
我build议通过AJAX获取值,并让PHP文件将值返回给JS文件。 这是一个更清洁的方法。
首先,你必须明白,没有一个程序实际上可以访问另一个程序的variables。
当你意识到的时候,其余的很简单。
你可以在主文件中设置一个jsvariables,然后包含你的外部js,或者让这个外部jsdynamic生成,由PHP生成
你可能想要的,被称为asynchronousJavaScript和XML(AJAX): http : //www.w3schools.com/ajax/default.aspa
基本上,想象能够将客户端JavaScript的消息发送到服务器上的PHP脚本。 在你给的例子(externaljs.js)中,你可以让脚本通过HTTP向服务器询问$ color是什么。 您还可以将脚本标记指向一个可生成所需JavaScript的PHP脚本。 这取决于你需要做什么。
它有助于对污点检查,数据validation和安全性有所了解;)
正如其他人所说,JavaScript没有访问PHPvariables。 但是,它可以访问DOM。 所以,你可以使用PHP来添加属性到一些页面元素。 然后你可以通过javascript访问这些属性。
例如<div id='apple' class='red'>
完全可用于JavaScript
externaljs.js是一个静态文件。 当然,它不能访问PHP数据。 将PHP数据传递给js文件的唯一方法是通过在PHP脚本中写入文件来物理地改变文件,尽pipe这是一个混乱的解决scheme。
编辑回应ÓlafurWaage的回答:我想写入到js文件不是唯一的方法。 通过PHP解释器传递js从来没有超越我的想法(有充分的理由)。
<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); ...
尽pipe像Sepehr Lajevardi一样使用AJAX会更清洁
唐解决scheme是好的,此外,如果你想在外部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
你不能这样做,不要尝试,因为这不是一个推荐的方法,但是你可以通过PHPvariables作为函数参数写入外部js函数
2017-2018及以上解决scheme:
由于没有人把它引入了,我想没有人想过把函数base64_encode
和json_encode
结合起来,你甚至可以像这样发送PHP数组variables:
的index.php
<?php $string = "hello"; $array = ['hi', 'how', 'are', 'you']; $array = base64_encode(json_encode($array));
然后,你可以加载你想要的js文件的参数为这样的查询string:
echo '<script type="text/javascript" src="js/main.php?string='.$string.'&array='.$array.'">';
然后, js/main.php
将看起来像这样。 你可以这样testing你的variables:
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
,你仍然从它的JavaScriptfunction。