即使我按下“对象”,数组长度也保持为0。它

时间:2014-07-09 11:11:16

标签: javascript jquery arrays

我有一小段代码从服务器读取一些ajax(这个位有效)。

var self = this;
var serverItems = new Array();
var playersOnlineElement = $("#playersOnline");

function DataPair(k, v) {
    this.key = k;
    console.log("new datapair: " + k + ", " + v);
    this.value = v;
}

DataPair.prototype.getKey = function() {
    return this.key;
}

DataPair.prototype.getValue = function() {
    return this.value;
}

$.getJSON("http://127.0.0.1", function(data) {
    $.each(data, function(key, val) {
        var pair = new DataPair(key, val);
        self.serverItems.push(pair);
    });
});

console.log(serverItems.length); //Problem is here
for (var i = 0; i < serverItems.length; i = i + 1) {
    var dpair = serverItems[i];
    if (dpair.getKey() === "playersOnline") {
        self.playersOnlineElement.text("Players Online: " + dpair.getValue());
    }
}

数据空间和JSON被加载但是当它们被推送到数组时它似乎不起作用。我尝试使用self.serverItems和serverItems,因为netbeans向我展示了变量的范围,如果我只使用serverItems,但我有点困惑,为什么这不起作用。任何人都可以帮助我吗?

我在评论中输入错误。 serverItems.length为0,即使在DOM树中的浏览器中进行调试时,它也有一个包含所有数据的数组serverItems。

假设这个serverItems在另一个范围内,而不是我想要获取长度时我调用的那个?

1 个答案:

答案 0 :(得分:4)

将此代码添加到成功部分,因为它的异步...

for (var i = 0; i < serverItems.length; i = i + 1) {
    var dpair = serverItems[i];
    if (dpair.getKey() === "playersOnline") {
        self.playersOnlineElement.text("Players Online: " + dpair.getValue());
    } 

为...

$.getJSON("http://127.0.0.1", function(data) {
    $.each(data, function(key, val) {
        var pair = new DataPair(key, val);
        self.serverItems.push(pair);

      for (var i = 0; i < serverItems.length; i = i + 1) {
        var dpair = serverItems[i];
        if (dpair.getKey() === "playersOnline") {
            self.playersOnlineElement.text("Players Online: " + dpair.getValue());
        } 
    });
});