Использовать код PHP во внешнем файле Javascript - PullRequest
16 голосов
/ 31 января 2012

Мне просто интересно, можно ли использовать внешний файл JS, содержащий код PHP.

мой внешний 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 не работает, так как я предполагаю, что проблема заключается в коде PHP в JS. Какие-нибудь мысли? Большое спасибо.

Ответы [ 5 ]

22 голосов
/ 31 января 2012

Вы можете сделать это, переименовав файл js в php и воспользовавшись этой ссылкой в ​​теге script 1004 * (как указано в других ответах)

Хотя это может показаться хорошим и простым способом, есть много причин не делать этого.

  • Кэширование (ваш сгенерированный скрипт не будет кэширован, это может быть изменено, но требует дополнительной работы)
  • Потребление памяти (каждый запрос к этому сгенерированному 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);
    })
  })
})
2 голосов
/ 31 января 2012

Если вам не нужен php для многих вещей в вашем js-файле, я бы посоветовал вам не делать, как указано выше, и не переименовывать ваш 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)

        })
    })
})
2 голосов
/ 31 января 2012

довольно распространенная вещь, которую нужно сделать, просто переименуйте свой js-файл в "external.js.php" (я использую этот метод, но если он заканчивается на php, то не имеет значения, что вы используете на самом деле), тогдапросто измените URL-адрес src в тегах сценария, и все готово.

Не забывайте, что вам может понадобиться включить файлы функций и конфигурации в javascript, чтобы эта функция base_url () работала.

1 голос
/ 31 января 2012

Я полагаю, что это возможно, но, как упомянул Брайан, вы должны сообщить препроцессору, что он должен его обработать. Вы можете либо указать ему использовать php для обработки файлов .js (не рекомендуется), либо просто использовать файл .php для своего javascript, а затем использовать:

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

Это должно быть хорошо, потому что тип mime все еще javascript, поэтому он будет интерпретироваться таким образом. Я никогда не пробовал, так что это предположение, но я считаю, что это должно сработать.

0 голосов
/ 27 июля 2015

Просто быстрая идея, которая может помочь некоторым людям:

Я думаю (никогда не пытался), есть также способ попросить веб-сервер (Apache и т. Д.) Разрешить обработку файлов JS как содержимого PHP.

Преимущества:

  • Нет необходимости переименовывать файлы JS в .js.php
  • Использует преимущества кэширования
  • Может применяться только к определенной папке (не ко всем файлам JS на вашем сайте)

Снимает:

  • Не забывайте, что эти файлы "php" где-то "кэшируются", поэтому не полагайтесь на тот факт, что файлы генерируются каждый раз.
  • Ресурсы сервера: как сказано в других ответах, используйте такой прием только в том случае, если действительно невозможно поместить код PHP вне файлов JS (например, с помощью запросов ajax) или в файлы, которые не загружаются сервер слишком много.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...