繁体   English   中英

为什么我不能使用jQuery将php变量发送到javascript变量?

[英]Why I cannot send php variable to javascript variable using jQuery?

我有使用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>

为什么没有封装问题?

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

甲PHP印刷的可变常常不需要是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变量是在<script>下定义的,所以它是一个全局变量 可以在网页上的任何位置访问全局变量。

相反,不能在其作用域之外访问局部变量 。请看下面的树形图:

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

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

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

这是在哪里可以访问哪些变量的表:

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

最终答案

您只需要执行以下操作: <script>var v1 = <?php echo json_encode($v1);?></script>然后再在网页上使用变量。

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

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

$(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);
});

它的工作,按照顺序

<?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">

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM