2014-04-14 60 views
0

我在PHP中有一個名爲$ jsonRankings的數組。它是一個索引數組,每個元素包含一些utf8編碼的HTML。爲什麼這個'undefined'

我這個數組加載到另一個陣列,在它有一些其他數據:

$sumArray['rankings'] = $jsonRankings; 

我已經做了這個數組的print_r的並驗證它僅包含我所需要的數據,指數從0開始。

我的PHP文件的輸出是這樣的:

echo json_encode($sumArray); 

這裏是我的javascript:

function getScores(){ 

var xmlhttp; 
var jsonText; 
var rowData; 
var rowText; 
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp = new XMLHttpRequest(); 

} 
else { // code for IE6, IE5 
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange = function() 
{ 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     jsonText = xmlhttp.responseText; 
     var parsedJSON = $.parseJSON(jsonText); 

     rowData = parsedJSON.rankings; 
     for(var index in rowData) 
     { 
      rowText += rowData[index]; 
     } 
     document.getElementById('rows').innerHTML = rowText; 
     document.getElementById('sessionName').innerHTML = parsedJSON.sessionName; 
     document.getElementById('elapsedTime').innerHTML = "Elapsed Time: " + parsedJSON.elapsedTime; 
     document.getElementById('remainingTime').innerHTML = "Remaining Time: " + parsedJSON.remainingTime; 
     document.getElementById('lapsCompleted').innerHTML = "Laps Completed: " + parsedJSON.lapsCompleted; 
     document.getElementById('flag').innerHTML = "Flag: " + parsedJSON.flag; 
     document.getElementById('tickerMessage').innerHTML = parsedJSON.tickerMessage; 
    } 
} 
xmlhttp.open("GET", "scoreboard.php?json=1", true); 
xmlhttp.send(); 


    setTimeout(getScores, 1000); 
} 

getScores(); 

基本上這個腳本每秒運行一次,並更新頁面上的一堆值,包括更改(表體)標記的內容,插入需要在那裏的任何行。

這一切都完美,除了我的表體總是有「undefined」作爲第一行。我真的不明白爲什麼。

+1

你不應該濫用'innerHTML'這樣。使用'textContent'代替 –

+0

JSON *實際*看起來像什麼?您應該能夠從瀏覽器的網絡調試控制檯中檢查它。 – Pointy

+2

你如何使用'$ .parseJSON'?你在頁面上有'jQuery'嗎?如果是這樣,爲什麼你不使用jQuery來發出AJAX請求? –

回答

0

你可能會對rowData的功能,所以要儘量添加到文本之前檢查與HasOwnProperty rowData是否具有這樣的特性:

for(var index in rowData) 
    { 
     if(rowData.hasOwnProperty(index)){ 
      rowText += rowData[index]; 
     } 
    } 
+0

-1沒有解釋('嘗試這個'並不能解釋你做了什麼) –

1

我的猜測是,rowTextundefined

var rowText; // The variable exist but it's value is undefined until a proper value is given to it. 

for(var index in rowData) 
{ 
    rowText += rowData[index]; 
} 
document.getElementById('rows').innerHTML = rowText; 

如果rowData是空的(你應該轉儲它的價值,以確保),那麼rowTextundefined

給它一個空字符串的初始值會更有意義,它應該給你空字符串而不是undefined。另外,請看why you shouldn't use innerHTML

3

打破它的問題:

var rowText;   //undefined 
rowText += "Hello"; //undefined + "Hello"; 
console.log(rowText); //"undefined Hello" 

如果設置爲空字符串,未定義的問題就會迎刃而解

var rowText = ""; 
相關問題