将PHP变量传递给非本机JavaScript

时间:2011-07-01 02:28:06

标签: php javascript

基本上,问题是:

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

如果在html文档中我打电话

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

,一切都很好。

但是,如果我在

附带的外部jS文档中做同样的事情
<script type="text/javascript" src="foo.js"></script> 

它不起作用。

有没有办法做到这一点?

3 个答案:

答案 0 :(得分:0)

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

在第二种情况下,您只需在JS文件中包含“<?php echo $test; ?>”字符串即可解析。

我的建议是:以现在传递的方式传递此值,但是从外部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值被警告(假设我没有写错;))。

答案 1 :(得分:0)

您可以尝试这样的事情:

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

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

答案 2 :(得分:0)

如果您想在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>