为什么这个' undefined'

时间:2014-04-14 17:47:28

标签: javascript php arrays

我在PHP中有一个名为$ jsonRankings的数组。它是一个索引数组,每个元素都包含一些utf8编码的HTML。

我将此数组加载到另一个包含其他数据的数组中:

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

基本上这个脚本每秒运行一次并更新页面上的一堆值,包括更改(表体)标签的内容,插入需要的任何行。

这一切都很完美,除了我的桌子身体总是有“未定义”作为第一行。我真的不明白为什么。

3 个答案:

答案 0 :(得分:3)

分解问题:

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

如果将其设置为空字符串,则未定义的问题将消失

var rowText = "";

答案 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为空(您应该转储它的值以确保),那么rowText将为undefined

给它一个空字符串的初始值会更有意义,它应该给你空字符串而不是undefined

另外,请查看why you shouldn't use innerHTML

答案 2 :(得分:0)

你可能在rowData上有一个函数,所以在添加到text之前尝试用HasOwnProperty检查rowData是否具有属性:

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