Подтвердить что ты не робот

Использовать PHP-код во внешнем файле Javascript

Мне просто интересно, можно ли использовать внешний 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 является проблемой. Есть предположения? Большое спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 3

Если вам не нужен php для многих вещей в вашем js файле, я бы посоветовал вам не делать то, что упоминалось выше, а не переименовывать ваш js файл в php, чтобы он разбирался. Файлы JS лучше всего статичны.

Одна вещь, которую вы можете сделать, это иметь script в верхней части вашего 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)

        })
    })
})

Ответ 4

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

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

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

Ответ 5

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

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

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

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

Снимает:

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