让PHP在.js页面上运行是不可行的?

时间:2014-04-26 01:31:29

标签: javascript php

我很好奇将PHP输出传递给Javascript。具体来说有两件事:

  • 我假设可以使用.php页面上的脚本标记安全地完成此操作。有什么理由不去吗?

  • 你能在.js页面上运行PHP吗?需要进行哪些配置更改?再次,是否有理由不这样做?

3 个答案:

答案 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)
  • 您可以在全javascript文件中输出动态内容(PHP),但扩展名仍为.php

示例1

<script type="text/javascript">
var myobject = {
    data: '<?php echo $myPHPvariable; ?>';
};
// or better yet:
var myBetterObject = <?php echo json_encode($myPhpObject); ?>;

function foo () { ... }
</script>

示例2

不推荐

<?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文件时出现意外行为。使用这种方式没有任何好处。