我很好奇将PHP输出传递给Javascript。具体来说有两件事:
我假设可以使用.php页面上的脚本标记安全地完成此操作。有什么理由不去吗?
你能在.js页面上运行PHP吗?需要进行哪些配置更改?再次,是否有理由不这样做?
答案 0 :(得分:2)
我假设可以使用.php页面上的脚本标记安全地完成此操作。有什么理由不去吗?
是。没理由不去。
你能在.js页面上运行PHP吗?需要进行哪些配置更改?再次,是否有理由不这样做?
是的,您必须将您的网络服务器配置为使用PHP模块作为.js后缀。在nginx上,您可以为以.js结尾的文件添加位置行: -
location ~ \.js$
{
}
在Apache上,您可以执行以下操作: -
AddType application/x-httpd-php .php .js
您可能不想这样做的一个原因是,任何静态JS文件都将通过PHP模块,这将导致额外的开销。另一种选择是在HTML脚本标记中引用PHP文件,例如: -
<script src="myfile.php"></script>
然后确保您的PHP使用正确的内容类型返回其输出,例如: -
header('Content-Type: application/javascript');
答案 1 :(得分:0)
你在两方面都是正确的。
<script>
页面的.php
标记中输出动态内容(PHP).php
<script type="text/javascript">
var myobject = {
data: '<?php echo $myPHPvariable; ?>';
};
// or better yet:
var myBetterObject = <?php echo json_encode($myPhpObject); ?>;
function foo () { ... }
</script>
不推荐
<?php
// This is an all-javascript file but the extension ends with .php
header('Content-Type: application/javascript');
?>
var myobject = {
data: '<?php echo $myPHPvariable; ?>';
};
function foo () { ... }
然后将该文件包含在HTML文档中:
<script type="text/javascript" src="/custom_javascript.php"></script>
它肯定会以.php
结束,幸好网页浏览器知道它是type="text/javascript"
部分的JavaScript,因为您的PHP脚本会输出正确的Content-Type
标题。
答案 2 :(得分:0)
第一个解决方案更简单:在输出HTML中声明一些JS变量,它们可以是常量或由PHP代码生成:
<script>
var my_variable = '<?php echo($my_variable); ?>';
</script>
然后您可以在Javascript代码中使用此变量。
.js
文件应该是静态的,以允许浏览器缓存它们,因此每次用户加载页面时都不会加载它们。通过使用PHP动态生成.js
文件,您可能会遇到使用缓存.js
而不是预期生成文件的浏览器的问题。例如,如果您的变量包含动态内容作为您网站的最新消息,日期时间等。
所以,是的,你可以做到,但是你必须阻止浏览器缓存文件,增加带宽使用量或者预期浏览器加载缓存的.js
文件时出现意外行为。使用这种方式没有任何好处。