我可以使用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; ?>");
答案 0 :(得分:86)
您实际上并没有访问它,在您提供页面时将其插入到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 :(得分:9)
你也可以在Javascript(我在这里使用jQuery)中从php脚本访问数据
在你的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
}
这也可以完成这项工作:)
答案 2 :(得分:7)
我所看到的是让.js文件通过php解释器运行。 我不推荐。
我建议通过AJAX获取值并让PHP文件将值返回给JS文件。这是一种更清洁的方法。
答案 3 :(得分:4)
首先,您必须了解没有程序可以实际访问其他程序的变量。
当你意识到这一点时,其余的都很简单 您可以在主文件中设置一个js变量,然后包含外部js,或者使这个外部js动态化,由PHP生成
答案 4 :(得分:4)
您可能想要的,称为异步JavaScript和XML(AJAX):http://www.w3schools.com/ajax/default.aspa
基本上,想象一下能够将客户端JavaScript中的消息发送到服务器上的PHP脚本。在你给出的例子(externaljs.js)中,你会让脚本通过HTTP向服务器询问$ color是什么。您还可以将脚本标记指向生成所需JavaScript的PHP脚本。这取决于你需要做什么。
有助于对污点检查,数据验证和安全性有所了解;)
答案 5 :(得分:3)
正如其他人所说,javascript无法访问php变量。但是,它确实可以访问DOM。因此,您可以使用php将属性添加到某个页面元素。然后你可以使用javascript访问这些属性。
e.g。 <div id='apple' class='red'>
完全可用于javascript
答案 6 :(得分:1)
externaljs.js是一个静态文件。当然它无法访问PHP数据。将PHP数据传递给js文件的唯一方法是通过在PHP脚本中写入文件来物理地改变文件,尽管这是一个混乱的解决方案。
编辑以回应ÓlafurWaage的回答:我想写入js文件不是唯一的方式。通过PHP解释器传递js从未在我脑海中浮现(理由充分)。
答案 7 :(得分:1)
<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会更加清洁
答案 8 :(得分:1)
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
答案 9 :(得分:0)
你不能这样做,不要尝试,因为这不是一个推荐的方法,但你可以将PHP变量作为函数参数传递给外部js写的函数
答案 10 :(得分:0)
2017-2018及以上解决方案:
由于还没有人知道它,我想没有人想过将函数base64_encode
和json_encode
结合起来,你甚至可以像这样发送PHP数组变量:
的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 :(得分:0)
您可以include()
就像其他任何东西一样:
<?php
$fruit = "apple";
$color = "red";
?>
<script type="text/javascript">
<?php include('/path/to/your/externaljs.js'); ?>
</script>
这基本上会将外部文件呈现为内联js。这里的主要缺点是您失去了浏览器缓存的潜在性能优势。另一方面,这比在javascript中重新声明php变量要容易得多。