2014-04-14 59 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 = ""; 
相关问题