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

标签 javascript php jquery

我有使用 javascript 变量的 javascript 函数,来自使用 jQuery 的 php 变量。代码如下所示:

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的一个基 native 制。另一方面,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> 下定义, 它是一个全局变量。可以在网页上的任何位置访问全局变量。

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

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

基本上,一个变量只能被它的 child 访问,而不能被它的 parent 访问。所以:

v1 function x内外均可访问和 function y但是v2只能在function x内部访问和 function yv3只能在function y里面访问

下表列出了哪些变量可以在哪里访问:

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

最终答案

您只需要这样做:<script>var v1 = <?php echo json_encode($v1);?></script>在您的网页上使用变量之前。

关于javascript - 为什么我不能使用 jQuery 将 php 变量发送到 javascript 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35334516/

相关文章:

javascript - 在页面加载时加载模态并在加载完成后关闭

javascript - 有没有办法检查用户是否可以使用 Javascript 解析某个主机名?

php - CakePHP 不会自动填充 add.ctp 中的父字段

php - 修正了一个我认为应该禁用整个路由资源但只禁用带有通配符的 URI 的拼写错误

javascript - 尝试通过 PHP 通过 XML 请求下载图像文件

JQuery animate - 有什么方法可以完整触发 "stall"吗?

javascript - jQuery 对象上下文中的 jquery 选择

javascript - 多重检查的最佳方法是在 Angular 数组中

jquery - 我如何使用 AJAX 使我的登录和注册页面在 Rails 3 中相同?

javascript - jQuery/Lodash - 通过键获取多个嵌套的 json 值