2014-07-09 2 views
0

서버에서 일부 아약스 (이 비트가 작동 함)를 읽는 코드 조각이 있습니다.배열 길이가 0인데도 '객체'를 밀어 넣습니다.

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

datapair와 JSON이로드되지만, 배열로 푸시 될 때 작동하지 않는 것 같습니다. netbeans는 serverItems 만 사용하면 변수의 범위가 좋았음을 보여 주었기 때문에 self.serverItems 및 just serverItems로 시도했지만 왜 작동하지 않는지 혼란 스럽습니다. 누구든지 나를 도울 수 있습니까?

오류가있는 곳에 의견을 달았습니다. DOM 트리의 브라우저에서 디버깅 할 때 serverItems 배열 안에 모든 데이터가 포함되어 있어도 serverItems.length는 0입니다.

아마도이 serverItems는 다른 범위에 있고 길이를 가져오고 싶을 때 호출하지 않습니다.

+0

체크 .. – iJade

+0

없음 오류, 모든 작품이 코드를 추가 예상대로 배열은 항상 0입니다. – Limnic

+0

@icke 대답은 거기에 있습니다, 감사합니다 :) – Limnic

답변

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

고마워요. 왜 그런 생각을하지 않았는지 모르겠습니다. 그것은 작동합니다 :) 나는 대답 할 때 대답을 표시 할 것입니다. – Limnic

+0

문제 없으니 도움이 되니 기쁩니다. – christiandev

+0

thnx alot, lol. 유사한 코드 조각을 디버깅하는 데 약 30 분을 소비합니다. (아마도 js를 좀 자주 사용해야합니다 ^^) –

관련 문제