【问题标题】:Global variable in JavaScript not set when using getJSON?使用 getJSON 时未设置 JavaScript 中的全局变量?
【发布时间】:2012-05-14 10:41:39
【问题描述】:

这是我的代码。如果我通过“谷歌检查员”检查“恶作剧”变量,一切正常。 但是最后一行的“警报”显示了一个 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>

【问题讨论】:

标签: javascript jquery ajax


【解决方案1】:

改成:

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

【讨论】:

    【解决方案2】:

    获取您的代码:

    <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)时,函数还没有执行,因为此时响应还没有回来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-31
      • 1970-01-01
      • 2015-11-18
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多