This question already has answers here:
How do I return the response from an asynchronous call?
                            
                                (39个答案)
                            
                    
                5年前关闭。
        

    

我有这段代码,但是我无法理解为什么当我先打印'globalData'时它可以很好地打印所有值,但是后来当我再次打印时它只打印一个空数组?我是JavaScript和jQuery的新手。

<script>
  var globalData = [];

  $( document ).ready(function() {

    $.get( "http://....", function( data ) {

      globalData.push(data[i]);
      .
      .
      .

    });
  console.log(globalData);  //["fg", "wedsd", "hjkyu"]
  });

console.log(globalData);    //[]

</script>

最佳答案

使用$( document ).ready()只能定义一个匿名函数,该函数将在成功构建文档结构后立即调用。然后您打印globalData这是空的。如果您定义的函数被调用,它将初始化globalData并看到值。

总而言之,因为您定义的回调函数被异步调用,并且定义本身不会阻塞并立即返回(即使尚未加载DOM),所以您在打印globalData之前在回调中填充值之前将其打印出来。

该问题甚至与用Ajax调用的$.get请求无关,即使您在那里遇到类似的情况。但是,如果仅在ready回调内填充数组,就会遇到相同的问题。

10-05 22:37