将PHP变量传递给非本地JavaScript

Passing PHP variables to non-native JavaScript

本文关键字:JavaScript PHP 变量      更新时间:2023-09-26

基本上,问题是:

<?php $test="foobar"; ?>

如果在html文档中,我调用

<script type="text/javascript">alert("<?php echo $test; ?>")</script>

,一切都很好。

然而,如果我在附带的外部jS文档中做同样的事情

<script type="text/javascript" src="foo.js"></script> 

它不起作用。

有办法做到这一点吗?

在第一种情况下,您实际将值传递给PHP脚本,其中<?php echo $test; ?>由PHP解析器解析,并替换为$test PHP变量的值。

在第二种情况下,您只需将"<?php echo $test; ?>"字符串包含到JS文件中,就不会对其进行解析。

我的建议是:以现在传递的方式传递这个值,但要从外部JS文件中正确引用它。例如,您可以调用JS文件中定义的一些函数,从PHP文件中传递参数。

还有一种丑陋的方法,比如让服务器将JS文件视为PHP文件,但我不建议这样做

例如:

如果你在你的PHP文件中包括:

<script type="text/javascript" src="foo.js"></script>
<script type="text/javascript">myHappyFunction("<?php echo $test; ?>")</script>

并且在您的JS文件(foo.JS)中:

(function(){
    var myHappyFunction = function(myParameter){
        alert(myParameter);
    };
    window['myHappyFunction'] = myHappyFunction; // pass outside scope
})();

当脚本执行时,您应该会看到$test值被警告(假设我没有写错;))。

您可以尝试以下操作:

http://www.javascriptkit.com/javatutors/externalphp.shtml

外部文件不必是.js扩展名。或者,您可以将.js文件与apache(或运行的任何Web服务器)中的PHP文件相关联。将JS文件保存为.php可能是最简单的,但请记住,它不会与呈现页面的脚本共享相同的变量。

如果您想在JavaScript文件中处理PHP,您有几个选项。在典型的Apache设置中,扩展名为.php .php3 .php4 .php5的PHP文件是在配置文件中专门定义的,允许PHP对其进行解析。默认情况下,Apache不会将JavaScript和其他文件(如图像)视为PHP文件。如果Apache这样做,性能就会下降。下面是我们可以做的…


选项A

选项A将所有JavaScript文件视为PHP文件,因此任何PHP都将被处理,同时将JavaScript输出到浏览器。您需要在开始时添加一个header()调用,以确保浏览器知道它是一个JavaScript文件。

httpd.conf

AddType application/x-httpd-php .js


选项B

选项B允许您将代码添加到Apache配置文件中,以将所有JS请求路由到PHP文件进行处理。在此选项中,scripts.php文件将处理$_REQUEST['src']变量,并获取适当的JS文件。

.htaccess(未测试,但类似的东西应该可以工作):

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(*'.js)$ scripts.php?src=$1 [L,QSA]
</IfModule>