This question already has answers here:
How do I return the response from an asynchronous call?
(39个答案)
5年前关闭。
我有这段代码,但是我无法理解为什么当我先打印'globalData'时它可以很好地打印所有值,但是后来当我再次打印时它只打印一个空数组?我是JavaScript和jQuery的新手。
(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