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

时间:2012-01-31 16:25:45

标签: javascript jquery codeigniter

我只是想知道是否可以使用包含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代码是问题所在。有什么想法吗?非常感谢。

5 个答案:

答案 0 :(得分:22)

您可以将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);
    })
  })
})

答案 1 :(得分:2)

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

不要忘记你可能需要在javascript中包含函数和配置文件,以便该base_url()函数能够正常工作。

答案 2 :(得分:2)

除非你的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)

        })
    })
})

答案 3 :(得分:1)

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

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

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

答案 4 :(得分:0)

只是一个简单的想法,这可以帮助一些人:

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

优点:

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

撤回申请:

  • 不要忘记那些“php”文件在某处被“缓存”,所以不要依赖每次都生成文件的事实。
  • 服务器资源:正如其他答案所述,只有当真的无法将PHP代码放在JS文件之外(例如使用ajax查询)或者不加载的文件时,请确保使用这样的技巧服务器太多了。