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