【问题标题】:How to access PHP variables in JavaScript or jQuery rather than <?php echo $variable ?> [duplicate]如何在 JavaScript 或 jQuery 中访问 PHP 变量,而不是 <?php echo $variable ?> [重复]
【发布时间】:2010-12-20 22:55:59
【问题描述】:

如何在 JavaScript 或 jQuery 中访问 PHP 变量?一定要写吗

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

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

【问题讨论】:

  • 如果您要将内容标记为“dups”帖子链接到这些线程,否则它只是 postcount ++。

标签: php javascript jquery


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    我在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
            }
    

    不管怎样,我希望这对其他人有帮助!如果有人有“不那么骇人听闻”的版本或最佳实践示例,我会全力以赴。

    【讨论】:

    • 请在其他用户做出好的建设性答案时给他们评分,不管他们是旧的还是新鲜的。我们有责任对做出良好努力的人提供积极的反馈。即使这对你没有帮助,只是投票意味着你觉得这很有帮助(并不总是对你)
    【解决方案3】:

    您的示例显示了将 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 恕我直言,这是一个好的开始。

    【讨论】:

    • +1 用于以示例提及 JSON。
    • 您在&lt;?php echo $simple; ?&gt; 周围有引号,我认为这是正确的。但是您在&lt;?php echo json_encode($complex); ?&gt; 周围也有引号,我认为这是错误的——json_encode() 返回有效的javascript,所以您肯定不想引用它吗?
    • Javascript 和 PHP 在同一个 PHP 文件上的交互,而不是在不同的 PHP 文件上。
    • 一个文件中没有 PHP/JavaScript 交互。对于一个文件,只有一种方式 PHP -> JavaScript。
    • 啊哈,但是不能在带有.js扩展名的js文件中调用(
    【解决方案4】:

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

    <?=$var?>
    

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

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

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

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

    【讨论】:

    • 正如你所说,这种语法是在大多数服务器上配置的,但不是全部。对于真正可移植的代码,我仍然建议使用完整的
    • 你无权访问 javascript 中的 $_SESSION
    • @Karsten:我不是建议你这样做。我只是建议在不需要 cookie 时使用会话变量而不是 cookie。当然,您仍然需要在脚本中回显它们。
    【解决方案5】:

    基本上,是的。你写alert('&lt;?php echo($phpvariable); ?&gt;');

    当然还有其他的互操作方式,但我认为没有一种方式能像上述那样简单(或更好)。

    【讨论】:

    • 题中有两个问题,你在回答哪个?
    • 两个问题?只有一个问题。
    【解决方案6】:

    我会说 echo() 将它们直接添加到 Javascript 源代码中是最可靠和向下兼容的方式。坚持下去,除非你有充分的理由不这样做。

    【讨论】:

    • 这是一个糟糕的答案。它不利用和示例。是的,使用嵌入式 PHP 将值回显到脚本中是一个常见的概念。但是,由于用户在询问,我们可以假设他们不知道。你的回答只会令人沮丧。它与某些人说“是的,我认为你可以做到”或“应该不难”之类的话一样没有帮助。不要试图太挑剔。只是说我们应该非常清楚地回答我们的问题,并提供所需的详细信息。
    • @Don 然后写一个更好的答案,或者参考其他提供大量示例的答案。该主题已有 3 年历史,并且得到了高度认可的答案。我不认为这里有什么可做的
    猜你喜欢
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多