在外部 Javascript 文件中使用 PHP 代码

Posted

技术标签:

【中文标题】在外部 Javascript 文件中使用 PHP 代码【英文标题】:Use PHP code in external Javascript file 【发布时间】:2012-02-23 09:09:22 【问题描述】:

我只是想知道是否可以使用包含 php 代码的外部 JS 文件。

我的外部 JS

$(document).ready(function()

    $('#update').click(function()
    var tableVal=;
    // a bit of php code I need in JS
    var search_city=<?php echo $_SESSION['search_city'];?>';
$.post('<?=base_url()?>/project_detail/pub', 'tableVal':tableVal,function(message)

        )
    )
)

我的浏览页面

<script type="text/javascript" src="<?= base_url();?>js/external.js"></script>

JS 不起作用,因为我认为 JS 中的 PHP 代码是问题所在。有什么想法吗?非常感谢。

【问题讨论】:

预处理器不会解析文件,除非文件以映射到正确内容类型的扩展名结尾,或者您告诉 Web 服务器 PHP 应该处理对以 .js 结尾的文件的请求跨度> 也就是说,把“external.js”改成“external.php”。 【参考方案1】:

您可以通过将js 文件重命名为php 并在script 标记src 中使用此链接(如其他答案中所指出的那样)来做到这一点

虽然这似乎是一种很好且简单的方法,但有很多理由不这样做。

缓存(您生成的脚本不会被缓存,这可能会更改但需要额外的工作) 内存消耗(对这个生成的js文件的每个请求都需要php

您可以简单地更改为这样的东西来完成它(以更好的方式,IMO):

<script type="text/javascript">
  var Settings = 
    base_url: '<?= base_url() ?>',
    search_city: '<?= $_SESSION['search_city'] ?>'
  
</script>
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script>

你的js 的内容变成了这样:

$(document).ready(function()
  // I assume that not using search_city in your sample code
  // and some syntax errors, is just by mistake...
  $('#update').click(function()
  var tableVal=search_city:Settings.search_city;
  $.post(Settings.base_url+'/project_detail/pub',
    'tableVal':tableVal,
    function(message)
      console.log(message);
    )
  )
)

【讨论】:

如果我使用 include('external.js.php') 会发生什么? 您的js 将被内联和处理。你需要用script标签包围它就可以了 是否可以将javascript vars的值存储在javascript代码块内的php vars中?【参考方案2】:

很常见的事情,只需将你的 js 文件重命名为“external.js.php”(我使用该方法,但只要它以 php 结尾,你使用什么并不重要)然后只需更改脚本标签中的 src url 即可。

不要忘记,您可能需要在 javascript 中包含函数和配置文件才能使 base_url() 函数正常工作。

【讨论】:

【参考方案3】:

除非你的js文件中很多东西都需要php,否则我建议你不要像上面提到的那样做,不要把你的js文件重命名为php来解析它。 JS 文件最好作为静态文件。

您可以做的一件事是在您的 php 文档顶部有一个脚本,您可以在其中将 base_url 变量分配为全局变量,供您的所有 js 使用:

在你的页面中,在包含任何 js 之前

<script type="text/javascript">var base_url = "<?= base_url();?>";</script>
<script type="text/javascript" src="<?= base_url();?>js/external.js"></script>

在你的 js 文件中

$(document).ready(function()

    $('#update').click(function()
    var tableVal=;
    // a bit of php code I need in JS
    var search_city=<?php echo $_SESSION['search_city'];?>';
    $.post(base_url+'/project_detail/pub', 'tableVal':tableVal,function(message)

        )
    )
)

【讨论】:

感谢您的帮助。正如多汁提到的。 js文件中还有php代码。 +1 虽然。 同意。这是不损失任何性能的好方法。声明带有 php 值的变量,然后在 js 文件中使用这些变量【参考方案4】:

我相信这是可能的,但正如 Brian 所说,您必须让预处理器知道它需要处理它。您可以告诉它使用 php 来处理 .js 文件(不推荐),或者简单地为您的 javascript 使用 .php 文件,然后使用:

<script type="text/javascript" src="<?= base_url();?>js/external.php"></script>

这应该没问题,因为 mime 类型仍然是 javascript,所以它会被这样解释。我从来没有真正尝试过这个,所以这是一个猜测,但我相信它应该可以工作。

【讨论】:

【参考方案5】:

只是一个快速的想法,可以帮助一些人:

我认为(从未尝试过)还有一种方法可以要求 Web 服务器(Apache 等)让 JS 文件作为 PHP 内容处理。

优点:

无需将 JS 文件重命名为 .js.php 利用缓存 只能应用于特定文件夹(不能应用于您网站的每个 JS 文件)

撤回:

不要忘记那些“php”文件被“缓存”在某个地方,所以不要依赖于每次都会生成文件这一事实。 服务器资源:正如在其他答案中所说,确保只有在确实不可能将 PHP 代码放在 JS 文件之外(例如使用 ajax 查询)或不加载的文件上时才使用这种技巧服务器太多了。

【讨论】:

以上是关于在外部 Javascript 文件中使用 PHP 代码的主要内容,如果未能解决你的问题,请参考以下文章

放置在外部脚本文件中时 Javascript 不执行

PHP 在外部文件中运行MODx API

如何使 STATIC_URL 在外部 JS 文件(Django)中工作

如何在外部 JavaScript 中从 ServerControl 访问 ClientID

是否可以在外部 javascript 文件中插入我的尖括号百分比等于 <%= %> 语法?

javascript 在外部文件中创建jquery函数