【问题标题】:Why I cannot send php variable to javascript variable using jQuery?为什么我不能使用 jQuery 将 php 变量发送到 javascript 变量?
【发布时间】:2016-02-11 08:45:11
【问题描述】:

我有使用 jQuery 的 php 变量中的 javascript 变量的 javascript 函数。代码如下:

jQuery:

$(document).ready(function(){
var v1 = <?php echo json_encode($v1,JSON_NUMERIC_CHECK); ?>;
});

javascript函数

function abc(){
alert(v1);
}

我无法打印出 v1 的值,但是当我不使用 jquery 将 php 变量发送到 javascript 变量时,我在 php 中使用 $v1 之后的以下代码

<script type="text/javascript">
var v1 = <?php echo json_encode($v1,JSON_NUMERIC_CHECK); ?>;
</script>

该函数可以打印出v1的值。

但是,我想查看我已经使用了哪些变量,并在顶部而不是底部查看它们。所以,我决定使用 jquery,但它失败了。它哪里出错了?


对我有用的第二种方法如下所示:

<!DOCTYPE html>
<html>
<head>
    <script>
      function abc(){
      alert(v1);
      }
    </script>
</head>
<body>
<?php
$sql = "SELECT r_ID,r_cname,address FROM rest ORDER BY count2+count3 DESC";
$result = $conn->query($sql);
if($result->num_rows > 0){
while($row = $result->fetch_array()){
    array_push($name,$row["r_cname"]);
}
}
?>
    <script>
      var v1 = <?php echo json_encode($name); ?>;
    </script>

</body>
</html>

为什么没有封装问题?

【问题讨论】:

  • 将文件扩展名改为.php
  • 您的alert(v1) 必须位于var v1 = ... 所在的同一个函数中。并且JSON 必须是有效的才能打印出有效的对象。
  • 指定您的所有代码在哪里?在哪些文件中?
  • 小菲尔,文件已经设置为.php
  • LearningMode,代码放在同一个文件中,比如说abc.php

标签: javascript php jquery


【解决方案1】:

您的alert(v1) 需要位于var v1 = ... 所在的同一个函数中。并且JSON 需要有效才能打印出有效的对象。

一个 PHP 打印变量通常需要 not 在 jQuery 中。它几乎肯定不需要在 jQuery 函数中,相信我,因为它通常只是一段数据。

我总是使用这种方法/做法:

<?php
//My businesses
?>
<!DOCTYPE html>
<html>
    ...
    <head>
        <script>
            //By the way, HTML5 don't require you to state the type of script, it is defaulted to JavaScript.
            var x = <?php echo json_encode($x, JSON_UNESCAPED_UNICODE);?>
        </script>
        <script>
            //Rest of my code
            $(function(){
                //My jQuery here
            })
        </script>
    </head>
    <body>
    ...
    </body>
</html>

为什么在 jQuery 中声明变量“不起作用”

可以,但是在$(function(){}) 的范围之外,没有人可以访问里面定义的变量。它是 JS 的基本机制。另一方面,$() 内部的function(){} 是一个参数,这是它无法在外部获取值的第二个原因。

例子:

var a = 3;

function(){
    var b = 4;
    a; //<-- 3
};

b; //<-- undefined

为什么第二个脚本有效

假设您的代码如下所示:

...
<script>
    var v1 = <?php echo json_encode($v1, JSON_UNESCAPED_UNICODE);?>
</script>
...
<script>
    $(function(){
        v1; //There is a value
    })
</script>
...

因为您的新 v1 变量是在 &lt;script&gt; 下定义的,所以它是一个全局变量。可以在网页的任何位置访问全局变量。

相比之下,局部变量不能在它所在的范围之外被访问。看这个树形图:

window
|- v1
`- function x
   |- v2
   `- function y
      `- v3

基本上,变量只能由其子级访问,而不能由其父级访问。所以:

v1可以在function xfunction y内部和外部访问,但v2只能在function xfunction y内部访问,v3只能在function y内部访问

下面是可以访问哪些变量的表格:

   globally | function x | function y
------------|------------|-----------
v1     ✓    |      ✓     |     ✓
------------|------------------------
v2          |      ✓     |     ✓
------------|------------------------
v3          |            |     ✓

最终答案

您只需要这样做:&lt;script&gt;var v1 = &lt;?php echo json_encode($v1);?&gt;&lt;/script&gt;,然后才能在网页上使用该变量。

【讨论】:

  • 为什么我把 在 php 中的 $v1 之后?看来这段代码会发生封装。
  • 我只是我的问题。实际上,我需要做很多事情才能在 php.ini 中获取 $x。所以,用你的方法很难实现。
  • @KeroroChan 对不起,我不太明白你的回复:/ 你会说中文吗?你只需要这样做:&lt;script&gt; var v1 = &lt;?php echo json_encode($v1);?&gt; &lt;/script&gt; 在你的网页上使用变量之前..
  • 我已经更新了适合我的第二种方式,但我不想将 放在底部。但是,为什么没有封装问题?
  • @KeroroChan 您不必将其放在底部。 &lt;script&gt; 标签可以放在&lt;head&gt;&lt;body&gt; 中。你甚至不需要将 JS + PHP 代码放在一个独立的标签中。只需将代码行放在全局某处即可。
【解决方案2】:

您的问题在于时间和/或范围。

此代码将在页面加载完成后运行,其中声明的所有变量都被封装并仅存在于其中:

$(document).ready(function(){...})

试试这个:

// Declaring variable in global scope.
var v1 = <?php echo json_encode($v1,JSON_NUMERIC_CHECK); ?>;

$(document).ready(function(){

    // Open console to view result
    console.log(v1);
});

【讨论】:

    【解决方案3】:

    它的工作,按照顺序

    <?php
        $v1 = ["a","b","c"];
    ?>
    <script type="text/javascript">
    v1 = <?php echo json_encode($v1,JSON_NUMERIC_CHECK); ?>;
    abc();
    function abc(){
        alert(v1);
    }
    </script>
    

    ----------------- 如果 js 在 php 代码之前,则更新代码 -------------------- --

    <script type="text/javascript">
    $( document ).ready(function() {
        v1 = $("#v1").val();
        abc();
        function abc(){
            alert(v1);
        }
    });
    </script>
    <?php
        $v1 = ["a"=>"aa","b"=>"bb","c"=>"cc"];
        $v1_json = json_encode($v1,JSON_NUMERIC_CHECK);
    ?>
    <input type="hidden" value='<?php echo $v1_json; ?>' id="v1">
    

    【讨论】:

    • 我不想要php后面的脚本。
    • @KeroroChan 更新了我的代码希望你想要这样的东西?
    • 它可能会工作,但它有太多的开销,比如 。但是,谢谢你的回答。
    猜你喜欢
    • 2022-01-24
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多