从外部javascript文件访问PHP var

时间:2010-05-28 12:13:34

标签: php javascript variables external

我可以使用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; ?>");

12 个答案:

答案 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_encodejson_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功能。

enter image description here

答案 11 :(得分:0)

您可以include()就像其他任何东西一样:

<?php
    $fruit = "apple";
    $color = "red";
?>

<script type="text/javascript">
    <?php include('/path/to/your/externaljs.js'); ?>
</script>

这基本上会将外部文件呈现为内联js。这里的主要缺点是您失去了浏览器缓存的潜在性能优势。另一方面,这比在javascript中重新声明php变量要容易得多。