Как получить доступ к переменным PHP в JavaScript или jQuery, а не <? Php echo $ variable?>

Как получить доступ к переменным PHP в JavaScript или jQuery? Должен ли я писать

<?php echo $variable1 ?> <?php echo $variable2 ?> <?php echo $variable3 ?> ... <?php echo $variablen ?> 

Я знаю, что могу хранить некоторые переменные в файлах cookie и получать доступ к этим значениям через файлы cookie, но значения в файлах cookie являются относительно стабильными значениями. Кроме того, существует предел, вы не можете хранить много значений в файлах cookie, и этот метод не так удобен. Есть ли лучший способ сделать это?

В вашем примере показан самый простой способ передачи PHP-переменных в JavaScript. Вы также можете использовать json_encode для более сложных вещей, таких как массивы:

 <?php $simple = 'simple string'; $complex = array('more', 'complex', 'object', array('foo', 'bar')); ?> <script type="text/javascript"> var simple = '<?php echo $simple; ?>'; var complex = <?php echo json_encode($complex); ?>; </script> 

Кроме этого, если вы действительно хотите «взаимодействовать» между PHP и JavaScript, вы должны использовать Ajax.

Использование файлов cookie для этого является очень опасным и ненадежным способом, поскольку они хранятся на стороне клиента и поэтому открыты для любых манипуляций или даже не будут приняты / сохранены. Не используйте их для такого взаимодействия. jQuery.ajax – хорошее начало ИМХО.

Если AJAX не является вариантом, вы можете использовать вложенные структуры данных для упрощения.

 <?php $var = array( 'qwe' => 'asd', 'asd' => array( 1 => 2, 3 => 4, ), 'zxc' => 0, ); ?> <script>var data = <?php echo json_encode($var); ?>;</script> 

В принципе, да. Вы пишете alert('<?php echo($phpvariable); ?>');

Существуют и другие способы взаимодействия, но ни один из них не может считаться простым (или лучше), как указано выше.

Вы задаете вопрос из двух частей. Что касается синтаксиса (я думаю, начиная с PHP4?), Вы можете использовать:

 <?=$var?> 

… если PHP настроен для его разрешения. И это на большинстве серверов.

Что касается хранения пользовательских данных, у вас также есть возможность сохранить его в сеансе:

 $_SESSION['bla'] = "so-and-so"; 

для настойчивости со страницы на страницу. Разумеется, вы также можете использовать базу данных. Вы даже можете PHP хранить переменные сеанса в db. Это зависит от того, что вам нужно.

Я бы сказал, что echo () непосредственно в исходный код Javascript является самым надежным и нисходящим способом. Оставайтесь с этим, если у вас нет веских оснований.

Я столкнулся с подобной проблемой при создании пользовательской разбивки на страницы для сайта, над которым я работаю.

Глобальная переменная I, созданная в functions.php, была определена и установлена ​​в 0. Я мог бы вывести это значение в моем javascript без проблем, используя описанный выше метод @Karsten. Проблема заключалась в обновлении глобальной переменной, которую я изначально установил в файл PHP.

Вот мое обходное решение (храбрый, я знаю!), Но после боев в течение часа в сжатые сроки следующие работы:

Внутри archive-episodes.php:

 <script> // We define the variable and update it in a php // function defined in functions.php var totalPageCount; </script> 

Внутри functions.php

 <?php $totalPageCount = WP_Query->max_num_pages; // In my testing scenario this number is 8. echo '<script>totalPageCount = $totalPageCount;</script>'; ?> 

Чтобы это было просто, я выводил переменную totalPageCount в обратном вызове $ ajax.success через оповещение.

 $.ajax({ url: ajaxurl, type: 'POST', data: {"action": "infinite_scroll", "page_no": pageNumber, "posts_per_page": numResults}, beforeSend: function() { $(".ajaxLoading").show(); }, success: function(data) { //alert("DONE LOADING EPISODES"); $(".ajaxLoading").hide(); var $container = $("#episode-container"); if(firstRun) { $container.prepend(data); initMasonry($container); ieMasonryFix(); initSearch(); } else { var $newItems = $(data); $container.append( $newItems ).isotope( 'appended', $newItems ); } firstRun = false; addHoverState(); smartResize(); alert(totalEpiPageCount); // THIS OUTPUTS THE CORRECT PAGE TOTAL } 

Как бы то ни было, я надеюсь, что это поможет другим! Если у кого-то есть «менее взломанная» версия или лучший пример практики, я все уши.