Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 让PHP在.js页面上运行不可行吗?_Javascript_Php - Fatal编程技术网

Javascript 让PHP在.js页面上运行不可行吗?

Javascript 让PHP在.js页面上运行不可行吗?,javascript,php,Javascript,Php,我很好奇如何将PHP输出传递给Javascript。具体来说,有两件事: 我假设使用.php页面上的脚本标记可以安全地完成这项工作。有什么理由不这样做吗 你能让PHP在.js页面上运行吗?需要进行哪些配置更改?再说一次,有没有理由不这么做 两方面你都是对的 您可以在.PHP页面上的标记中输出动态内容(PHP) 虽然扩展名仍然是.PHP 例1 变量myobject={ 数据:''; }; //或者更好: var myBetterObject=; 函数foo(){…} 例2 不推荐 变量

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

  • 我假设使用.php页面上的脚本标记可以安全地完成这项工作。有什么理由不这样做吗

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


两方面你都是对的

  • 您可以在
    .PHP
    页面上的
    标记中输出动态内容(PHP)
  • 虽然扩展名仍然是
    .PHP
例1

变量myobject={
数据:'';
};
//或者更好:
var myBetterObject=;
函数foo(){…}
例2 不推荐


变量myobject={
数据:'';
};
函数foo(){…}
然后将该文件包括在HTML文档中,包括:

<script type="text/javascript" src="/custom_javascript.php"></script>


它肯定应该以
.php
结尾,谢天谢地,web浏览器通过
type=“text/JavaScript”
部分知道它是JavaScript,因为您的php脚本输出正确的
内容类型
标题。

第一个解决方案更简单:在输出HTML中声明一些JS变量,它们可以是常量,也可以由PHP代码生成:


var my_变量=“”;
然后可以在Javascript代码中使用此变量

.js
文件应该是静态的,以允许浏览器缓存它们,因此不会在用户每次加载页面时都加载它们。通过使用PHP动态生成
.js
文件,使用缓存的
.js
而不是预期生成的文件的浏览器可能会出现问题。例如,如果变量包含动态内容,如网站上的最后一条新闻、日期时间等

因此,是的,您可以这样做,但是您必须防止浏览器缓存文件,增加带宽使用率,或者在浏览器加载缓存的
.js
文件时出现意外行为。用这种方法没有好处

我假设使用.php页面上的脚本标记可以安全地完成这项工作。有什么理由不这样做吗

对。没有理由不这样做

你能让PHP在.js页面上运行吗?需要进行哪些配置更改?再说一次,有没有理由不这么做

是的,您必须将Web服务器配置为使用PHP模块作为.js后缀。在nginx上,您可以为以.js结尾的文件添加位置行:-

location ~ \.js$
{
}
在Apache上,您可以执行以下操作:-

AddType application/x-httpd-php .php .js
您可能不想这样做的一个原因是,任何静态JS文件都会经过PHP模块,这将导致额外的开销。另一个选项是在HTML脚本标记中引用PHP文件,例如:-

<script src="myfile.php"></script>

如果你告诉浏览器不要缓存它们,你不会有问题。我同意,但这是对带宽的浪费。是的,理想情况下,你只会在声明需要从服务器动态获取的所有数据并告诉浏览器缓存所有其他.js一年左右的时间时才这样做,然后在修改它们时用查询字符串使它们无效。为什么要将数据类型传递给Javascript?是动态内容(定期更新的内容)还是静态内容?我的特别问题是开发服务器与生产服务器。我在考虑只使用一个页面的方法,这需要在它们之间保持唯一性,并且让PHP和Javascript都选择变量(对于主机URL等)。我想让这个问题更宽泛一些,因为我可以想到它的其他用途。但要回答您的问题,不,在我的情况下,数据不会经常更改。我看不到您的问题与dev/prod环境之间的联系。也许在问题中添加一些您想要使用的变量的示例可以帮助我们了解您想要做什么。如果我需要声明(比如)主机URL的字符串或路径,那么它们在开发环境和生产环境中是不同的。由于能够将PHP输出到Javascript,我可以有一个PHP文件,在其中声明这些设置,JS和PHP都可以获取相同的变量。这样,我就可以从dev到prod上传和替换所有其他文件,一切都可以正常工作。如果我需要更改一个设置,比如路径或主机名,我只需要在一个地方进行更改。但我认为这是另一个问题,与这个问题无关。我建议你发一个新问题。无论如何,您对每个环境的配置文件细节的想法是好的(Symfony2使用它)。谢谢,这是一个很好的信息。
AddType application/x-httpd-php .php .js
<script src="myfile.php"></script>
header('Content-Type: application/javascript');