0

我有 php 文件,在这个文件中我有这个代码:

    <script language="JavaScript" type="text/javascript" src="jquery.js"></script>
    <script language="JavaScript">
        $(document).ready( function () {
            var myvar = <?php   echo json_encode($myvar);   ?> ;
        });
    </script>
    <script language="JavaScript" type="text/javascript" src="costum.js">  </script>

在 costum.js 文件中我有代码:

$(document).ready( function () {
    alert(myvar );
});

这不起作用,错误控制台返回“myvar 未定义”

如果在 php 文件中我写了这个(也就是说,没有“document.ready”)

 <script language="JavaScript">
     var myvar = <?php   echo json_encode($myvar);   ?> ;
 </script>

在 costum.js 文件中,代码已经在工作了。请说说为什么会这样?

4

3 回答 3

5

尝试

<script>
    var myvar;
    $(document).ready( function () {
        myvar = <?php   echo json_encode($myvar);   ?> ;
    });
</script>

您的变量必须声明为全局(或者换句话说,在外部范围内)才能从两个document.ready函数中查看。

作为旁注language属性不是必需的。甚至type没有必要(如果您使用的是html5doctype)

于 2012-09-03T12:59:30.813 回答
1

myvar在 ready-function 的本地范围内。将var声明移到外部以使其全局并可用于其他脚本。

但是,由于您只是分配给一个变量,因此您无论如何都不需要等待 DOMready。只需使用

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

顺便说一句,该language属性已弃用

于 2012-09-03T13:00:37.873 回答
1

函数内部的局部变量只在函数范围内可见。

当您在全局范围内声明变量时,它就是全局变量。

您可以通过以下方式将其公开到全局范围:

$(document).ready( function () {
      var myvar = <?php   echo json_encode($myvar);   ?>;
      window['myvar'] = myvar;
 });
于 2012-09-03T13:00:45.783 回答