数组长度保持为0,即使我按下'objects'到它

Array length remains 0 even though I push 'objects' to it

本文关键字:到它 objects 数组      更新时间:2023-09-26

我有一小段代码,从服务器读取一些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被加载,但当他们被推到数组它似乎不工作。我试了试自己。serverItems和只是serverItems,因为netbeans向我展示了变量的范围是好的,如果我只使用serverItems,但我有点困惑,为什么这不起作用。有人能帮我吗?

我在错误的地方加了注释。serverItems。长度为0,即使在DOM树中的浏览器中调试时,它有一个包含所有数据的数组serverItems。

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

将此代码添加到success部分,因为它是异步的…

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());
        } 
    });
});