我有一小段代码,可以从服务器读取一些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,因为如果仅使用serverItems,netbeans向我展示了变量的范围很好,但是我对为什么不起作用感到困惑。谁能帮我?
我在错误所在的地方添加了注释。即使在DOM树中的浏览器中进行调试时,serverItems.length仍为0,但它具有包含所有数据的数组serverItems。
假设此serverItems在另一个作用域中,而不是在我要获取长度时正在调用的那个作用域?
最佳答案
将此代码添加到成功部分,因为它是异步的...
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());
}
});
});