Как я могу отделить javascript от PHP, когда JS нужна переменная PHP?

Ниже приведен небольшой фрагмент кода, который я видел с помощью jquery и PHP.

Обратите внимание на часть PHP в строке 5, я обычно помещаю свой javascript в отдельные файлы, чтобы как можно было сохранить JS в отдельных файлах, но по-прежнему использовать PHP, когда это необходимо, как показано ниже?

//when the DOM is ready $(document).ready(function(){ //settings on top var domain = 'http://davidwalsh.name/'; var initialPosts = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; //function that creates posts var postHandler = function(postsJSON) { $.each(postsJSON,function(i,post) { 

Related of "Как я могу отделить javascript от PHP, когда JS нужна переменная PHP?"

Что я обычно делаю:

  • поместите как можно больше JS в файл .js (для кэширования на стороне клиента и все такое)
  • этот JS-код использует переменную JS
  • что переменная JS объявлена ​​/ инициализирована из файла PHP; это единственная часть, где вам нужен какой-то код, выполняемый на стороне сервера, на самом деле

Например, у меня было бы что-то вроде этого, я полагаю:

my-file.php:

 var thisIsMyJSVar = '<?php echo $test; ?>'; 

Итак, в PHP мы объявляем переменную и устанавливаем ее значение. Это «динамическая» часть.

и в my-file.js:

 //when the DOM is ready $(document).ready(function(){ //settings on top var domain = 'http://davidwalsh.name/'; var initialPosts = thisIsMyJSVar; // Use the JS variable declared in the PHP file //function that creates posts var postHandler = function(postsJSON) { $.each(postsJSON,function(i,post) { 

Здесь, в статическом JS-файле, мы используем только значение; ничего здесь не является динамическим, и этот файл может быть кэширован клиентом – чтобы он не был повторно загружен на каждой странице.

Проблема с этой идеей заключается в том, что файл JS зависит от некоторой инициализации, сделанной в файле PHP 🙁

Таким образом, было бы неплохо иметь «значение по умолчанию» в JS-файле, на всякий случай …

Кроме того, у вас должно быть хорошее соглашение о помете, чтобы не было нескольких файлов, использующих / объявляющих / в зависимости от одной и той же переменной JS; на самом деле может быть хорошей идеей поставить все ваши «переменные конфигурации» внутри одного объекта javascript, чтобы не загрязнять глобальное пространство имен …

Если вы хотите, чтобы ваш Javascript был отделен от вашего PHP, используйте PHP-файл для создания небольшого фрагмента Javascript только для установки переменных. Затем используйте эти переменные из вашего .js-файла:

HTML:

 <script> var INITIAL_POSTS = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; </script> <script src="my.js"> 

my.js Javascript файл:

 //when the DOM is ready $(document).ready(function(){ //settings on top var domain = 'http://davidwalsh.name/'; var initialPosts = INITIAL_POSTS; //function that creates posts var postHandler = function(postsJSON) { $.each(postsJSON,function(i,post) { 

У вас всегда может быть php «написать» файл javascript вместо того, чтобы быть статичным – нечего останавливать <script src="script.php">

Существует два основных способа справиться с тем, что не требует смешивания JavaScript и PHP вообще:

  1. Когда PHP генерирует страницу, напишите этот вывод ( get_posts(0,$_SESSION['posts_start']); в скрытый ввод в форме (или в другом месте на странице).
  2. Позвольте JavaScript получить этот вывод из отдельного запроса PHP через AJAX.

Как правило, если это то значение, которое не изменится, пока посетитель просматривает страницу (или вас не волнует, если она изменится, поскольку вы не будете обновлять другой контент динамически), напишите ее прямо на странице.

JavaScript и jQuery могут затем легко извлекать это значение с помощью кода, например

 var initialPosts = $("#that-hidden-field-mentioned-earlier").val(); 

Пока кто-то не выберет более чистый ответ:

Вы можете определить глобальную переменную js в вашем файле php / html и обратиться к ней в вашем скрипте:

PHP / HTML:

 <script> var global = <?php echo get_posts(0,$_SESSION['posts_start']); ?>; </script> 

ЯШ:

 ... var initialPosts = global; ... 

Это должно работать, я имею в виду файл .php? Поскольку JS является клиентской стороной, php должен обрабатываться через php-движок, прежде чем браузер обрабатывает javascript на стороне клиента?