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

Как получить доступ к переменным 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, и этот метод не так удобен. Есть ли лучший способ сделать это?

4b9b3361

Ответ 1

В этом примере показан самый простой способ передачи 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 является хорошим началом ИМХО.

Ответ 2

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

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

Ответ 3

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

<?=$var?>

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

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

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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

Глобальная переменная, созданная в 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
        }

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