2011-07-01 26 views
2

基本上,问题是这样的:传递PHP变量非本地JavaScript

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

如果HTML文档中我称之为

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

,一切都很好。

但是,如果我做同样的事情外部JS文件中包含

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

这是行不通的。

有没有办法做到这一点?

回答

0

在第一种情况下,您实际上将值传递给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值在脚本执行时被警告(假设我没有犯这个错误;))。

0

你可以尝试这样的事情:

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

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

0

如果你想在JavaScript文件中处理PHP,你有几个选择。在典型的Apache安装程序中,具有诸如.php.php3.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配置文件(S)代码添加到路由所有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>