JavaScript中的全局变量在使用getJSON时未设置?

时间:2012-05-04 21:31:08

标签: javascript jquery ajax

这是我的代码。如果我通过“谷歌检查员”检查“恶作剧”变量一切正常。 但是最后一行的“警报”显示了一个0大小的数组! 我捣乱了本地/全局变量?

<script type="text/javascript">
(function() { 

 pranks = [];

function getAllPranks(){


    $.getJSON('list.json', function(data) {

      $.each(data['pranks'], function(key, val) {
        pranks.push(val);
      });

    });

}

 $(document).ready(function(){


    getAllPranks();

    alert(pranks.length);

 });


 }());
 </script>

2 个答案:

答案 0 :(得分:3)

将其更改为:

$.getJSON('list.json', function(data) {
  $.each(data['pranks'], function(key, val) {
    pranks.push(val);
  });
  alert(pranks.length); /* pranks has data now */
});

答案 1 :(得分:1)

拿你的代码:

<script type="text/javascript">
(function() { 
    function getAllPranks( callback ) {
        $.getJSON('list.json', function(data) {
            $.each(data['pranks'], function(key, val) {
                pranks.push(val);
            });
            callback( pranks );
        });
    }

    $(document).ready(function(){
        getAllPranks( function( pranks ) {
            alert(pranks.length);
        } );
    });
}());
</script>

$.getJSON是异步的。这意味着一旦结果返回,就会执行回调函数(function(data))。当您执行alert(pranks.length)时,该函数尚未执行,因为此时响应尚未返回。