从外部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_encodejson_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。

在这里输入图像描述