【问题标题】:Get PHP variable to javascript获取 PHP 变量到 javascript
【发布时间】:2015-11-14 16:19:04
【问题描述】:

我似乎找不到这个问题的答案。我需要获取一个 PHP 变量并将其插入到 javascript 中。

这是我在 PHP 页面正文中的示例:

<script type="text/javascript">
$(document).ready(function(){
    $('#button').click(function() { 
        var info = "<?php Print($info); ?>";
        $.post($("#frm1").attr("action"), $("#frm1").serialize(), function () {
        alert(info);
        });
    });   
});
</script>

<?php
    $info="some info";
?>
<form  id="frm1" method="post" action="somepage.php">
<input name="Text1" type="text" />
<input id="button" type="submit" value="submit" />
</form>

所以问题是弹出警报但没有回显 $info 字符串。显然我错过了获取 PHP 变量的正确方法。请帮忙。

【问题讨论】:

  • 打印后你只需为你的 php var 添加价值...

标签: javascript php


【解决方案1】:

如果 php 变量在内部 HTML 中可见,您可以执行以下操作来获取该变量:

HTML:

<span class="variable-content"><?php echo $variable; ?></span>

jQuery:

var php_variable = $(".variable-content").text();
alert(php_variable);

【讨论】:

  • 好主意,谢谢。我刚刚添加了一个隐藏标签,正如 Miko 在下面建议的那样,就是这样! :)
【解决方案2】:

变化:

alert(info);

到:

alert('<?php echo "some info"; ?>');

【讨论】:

  • 我试图获取一个 PHP 变量,而不仅仅是回显一些文本。还是谢谢。
  • 不能替换变量的任何原因是什么?
  • 用我给你看的代码,你不能使用变量,它什么都没有。相反,如果我只是按照您的建议放置字符串,它当然会起作用,但这不是我需要的。解决方案已经发布,再次感谢。
【解决方案3】:

在我看来你是在使用它之后声明变量。所以 $info 里面什么都没有。

尝试:

<?php
        $info="some info";
    ?>
        <script type="text/javascript">
    $(document).ready(function(){
        $('#button').click(function() { 
            var info = "<?php echo $info; ?>";
            $.post($("#frm1").attr("action"), $("#frm1").serialize(), function () {
            alert(info);
            });
        });   
    });
    </script>


    <form  id="frm1" method="post" action="somepage.php">
    <input name="Text1" type="text" />
    <input id="button" type="submit" value="submit" />
    </form>

【讨论】:

  • 感谢您的回答。如果脚本在正文上,这将正常工作。但是如果脚本在头部并且变量在正文中,它将无法工作。但这只是另一种情况;)
【解决方案4】:

试试这个

<!DOCTYPE html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
</head>

<body>

<span id="info" hidden><?php
$info="some info";
echo $info;
?></span>


<form  id="frm1" method="post">
<input name="Text1" type="text" />
<input id="button" type="submit" value="submit" />
</form>

<script type="text/javascript">
$(document).ready(function(){
$('#button').click(function() { 
    var info = $("#info").text();

    $.post($("#frm1").attr("action"), $("#frm1").serialize(), function () {
    alert(info);
    });

});   
});
</script>


</body>
</html>

【讨论】:

  • 好主意,还有隐藏标签。谢谢
【解决方案5】:

示例代码的主要问题

所有的 PHP 都在 JS 之前执行。 PHP 执行,然后将您的 HTML 和 JS 输出到它们被渲染/执行/等的浏览器。

因此,您的 Print$info 在您的声明和定义 $info 之前执行。你需要定义它,然后输出它。

您应该考虑的其他问题

一旦解决了这个问题,您最终会遇到简单地将数据喷入 JS 中间的问题。它不容易维护,未经准备的数据最终会破坏你的 JS 语法。当我不得不做这样的事情时,我一般会尽量将两者分开:

<?php
    // declare and define the data
    $info = "foo";
?>

<script>
    // prepare an IIFE which takes the data as a param
    (function (info) {
        // inside this function body you can use the data as you
        // please without muddling your JS by mixing in PHP
        alert(info);
    }(
        // in the invoking parens, output encoded data
        <?= json_encode($info) ?>
    ));
<script>

这种方法的另一个好处是您可以将任何 PHP 数据结构传递给 JS,而无需以任何方式更改方法。 (与使用输入或元素文本相反,您需要解析 JSON 并跟踪哪些元素包含哪些值)

【讨论】:

  • 感谢您的解释。这对以后的编码很有用;)
【解决方案6】:

如果您不想使用 JQuery,您可以将 php 值放入隐藏输入中,并使用 JavaScript documentGetElementById... 从隐藏变量中获取它,这样您就可以将脚本放在头脑中,这似乎符合您的要求要求。根据@Miko 的隐藏跨度或:

    <input type="hidden" id="php_info_data" name="php_info_data" value="<?php echo $info; ?>" />

在正文加载后执行的标题脚本中:

    var info = documentGetElementById('php_info_data').value;

【讨论】:

    【解决方案7】:
    <?php
        $info="some info";
    ?>
    <script type="text/javascript">
    $(document).ready(function(){
        $('#button').click(function() { 
            var info = "<?php echo($info); ?>";
            alert(info);
            $.post($("#frm1").attr("action"), $("#frm1").serialize(), function () {
            alert(info);
            });
        });   
    });
    </script>
    
    <form  id="frm1" method="post" action="somepage.php">
    <input name="Text1" type="text" />
    <input id="button" type="submit" value="submit" />
    </form>
    

    【讨论】:

      【解决方案8】:

      试试这个

      var info = "<?php echo $info; ?>";
      

      【讨论】:

        【解决方案9】:

        试试这个

        <?php
            $info="some info";
        ?>
        <script type="text/javascript">
        $(document).ready(function(){
            $('#button').click(function() { 
        
                $.post($("#frm1").attr("action"), $("#frm1").serialize(), function () {
                alert(<?php echo $info;?>);
                });
            });   
        });
        </script>
        
        <form  id="frm1" method="post" action="somepage.php">
        <input name="Text1" type="text" />
        <input id="button" type="submit" value="submit" />
        </form>
        

        【讨论】:

          【解决方案10】:

          您可以将 PHP 变量转换为 JSON,然后将其发送到 Javascript,因为 JSON 所有语言都支持 示例

          var a=<?php echo json_encode($info); ?>
          
          alert(a);
          

          或者干脆

          var a=<?php echo $info; ?>
          
          alert(a);
          
          <?php $info=10; ?>
              <script>
          
                  var a=<?php echo $info; ?>;
                  var a1=<?php echo json_encode($info+10); ?>;
                  alert(a);
                  alert(a1);
              </script>
          

          【讨论】:

            猜你喜欢
            • 2018-02-20
            • 2010-09-29
            • 2013-03-06
            • 1970-01-01
            • 2013-09-02
            • 1970-01-01
            • 2017-04-24
            • 2016-01-31
            • 1970-01-01
            相关资源
            最近更新 更多