如何在 JavaScript 或 jQuery 中访问 PHP 变量而不是 <?php echo $variable ?>

IT技术 php javascript jquery
2021-01-12 14:29:28

如何在 JavaScript 或 jQuery 中访问 PHP 变量?我必须写吗

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

我知道我可以在 cookie 中存储一些变量,并通过 cookie 访问这些值,但是 cookie 中的值是相对稳定的值。而且,有一个限制,cookie中不能存储很多值,方法也不是那么方便。有没有更好的方法来做到这一点?

6个回答

您的示例显示了将 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是一个好的开始。

只有一个文件中没有 PHP/JavaScript 交互。对于一个文件,只有一种方式 PHP -> JavaScript。
2021-03-12 14:29:28
Javascript 和 PHP 在同一个 PHP 文件上的交互,而不是在不同的 PHP 文件上。
2021-03-14 14:29:28
+1 以示例提及 JSON。
2021-04-03 14:29:28
你有引号<?php echo $simple; ?>,我认为这是正确的。但是您也有引号<?php echo json_encode($complex); ?>,我认为这是错误的 ---json_encode()返回有效的 javascript,所以您肯定不想引用它吗?
2021-04-10 14:29:28
啊哈,但不能在带有 .js 扩展名的 js 文件中调用它(
2021-04-10 14:29:28

如果 AJAX 不是一个选项,您可以使用嵌套数据结构来简化。

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

你问的是一个由两部分组成的问题。至于语法(我认为从 PHP4 开始?)你可以使用:

<?=$var?>

... 如果 PHP 配置为允许它。它在大多数服务器上。

至于存储用户数据,您还可以选择将其存储在会话中:

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

用于从页面到页面的持久性。您当然也可以使用数据库。您甚至可以让 PHP 将会话变量存储在数据库中。这仅取决于您需要什么。

正如您所说,大多数服务器上都配置了此语法,但不是全部。对于真正可移植的代码,我仍然建议使用完整的 <?php echo $variable /? 句法。每个实例仅多 7 个字符。但是,如果您可以完全控制您的托管服务器,并且您知道您不会将代码提供给不同服务器上的其他用户,那么就去做吧。
2021-03-11 14:29:28
@Karsten:我并不是建议你这样做。我只是建议在不需要 cookie 时使用会话变量而不是 cookie。当然,您仍然需要在脚本中回显它们。
2021-03-14 14:29:28
您无权访问 javascript 中的 $_SESSION
2021-03-26 14:29:28

基本上,是的。你写alert('<?php echo($phpvariable); ?>');

确实有其他互操作的方法,但我认为没有一种方法像上述那样简单(或更好)。

两个问题?只有一个问题。
2021-04-03 14:29:28
问题中有两个问题,你在回答哪个?
2021-04-04 14:29:28

在为我正在处理的网站构建自定义分页时,我遇到了类似的问题。

我在functions.php 中创建的全局变量被定义并设置为0。我可以使用上面概述的方法@Karsten 在我的javascript 中输出这个值没有问题。问题在于更新我最初在 PHP 文件中设置为 0 的全局变量。

这是我的解决方法(hacky?我知道!)但是在紧迫的期限内挣扎了一个小时后,以下工作:

在 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>';
?>

为了简单起见,我通过警报$ajax.success回调中输出totalPageCount变量

$.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
        }

不管怎样,我希望这能帮助别人!如果有人有“不那么黑客”的版本或最佳实践示例,我会全力以赴。

请在其他用户做出很好的建设性回答时给他们评分,不管他们是老是新。我们有责任对做出良好努力的人提供积极的反馈。即使这对您没有帮助,只是投票意味着您发现这有帮助(并不总是对您有用)
2021-03-20 14:29:28