返回的AJAX数组未被复制到数组

我有简单的AJAX函数,它使用jQuery从数据库返回300个测试对象的数组。 我可以看到返回的数据,我可以使用FireBug逐步完成第一个循环并进入构造函数。

此数据将复制到JS数组。 代码片段如下所示:

//retrieve star locations to display on page $.getJSON("stars.php?jsoncallback=?", function(data) { for (var x=0, xx=data.length; x<xx; x++) { // planetArray[x] = new Planet(data[x].xpos, data[x].ypos); // also doesn't work. planetArray.push(new Planet(data[x].xpos, data[x].ypos)); } }); for (var i=0, ii=planetArray.length; i<ii; i++) { // display the data. } 

FireBug说planetArray.length为零。 Planet构造函数如下所示:

 function Planet(x, y) { this.x = x; this.y = y; } 

我认为这是一个范围问题,但我似乎无法弄明白。 在其他语言中,创建一个新对象意味着它存在于堆上并在范围内存活,但在这里它似乎消失在以太中。

如何返回一个数组并将其推入我自己的数组中以供以后使用(甚至在另一个函数中)?

AJAX请求是异步发生的 – 在尝试显示数据之前,您不是在等待它完成。

将显示代码移动到回调中它应该可以工作。

如果你添加planetArray = [];它会有所帮助planetArray = []; 在示例代码之前。

实际上只是赞美两个答案。
就像Greg说它异步工作意味着当第二部分(//显示数据循环)被执行时,请求还没有返回,所以数组没有被填充。

 var planetArray = []; //retrieve star locations to display on page $.getJSON("stars.php?jsoncallback=?", function(data) { for (var x = 0; x < data.length; x++) { planetArray.push(new Planet(data[x].xpos, data[x].ypos)); } for (var i = 0; i < planetArray.length; i++) { // exectutes after part below // data already filled } }); for (var i = 0; i < planetArray.length; i++) { // NO DATA YET }