我有一小段代码从服务器读取一些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在另一个范围内,而不是我想要获取长度时我调用的那个?
答案 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());
}
});
});