基本上,问题是:
<?php $test="foobar"; ?>
如果在html文档中我打电话
<script type="text/javascript">alert("<?php echo $test; ?>")</script>
,一切都很好。
但是,如果我在
附带的外部jS文档中做同样的事情<script type="text/javascript" src="foo.js"></script>
它不起作用。
有没有办法做到这一点?
答案 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>