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

时间:2009-12-08 14:24:35

标签: javascript jquery ajax arrays

我有简单的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;
}

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

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

3 个答案:

答案 0 :(得分:6)

AJAX请求以异步方式发生 - 在尝试显示数据之前,您并没有等待它完成。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

实际上只是赞美两个答案 就像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
}