我在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();
基本上这个脚本每秒运行一次并更新页面上的一堆值,包括更改(表体)标签的内容,插入需要的任何行。
这一切都很完美,除了我的桌子身体总是有“未定义”作为第一行。我真的不明白为什么。
答案 0 :(得分:3)
分解问题:
var rowText; //undefined
rowText += "Hello"; //undefined + "Hello";
console.log(rowText); //"undefined Hello"
如果将其设置为空字符串,则未定义的问题将消失
var rowText = "";
答案 1 :(得分:1)
我的猜测是rowText
是undefined
。
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
。
答案 2 :(得分:0)
你可能在rowData上有一个函数,所以在添加到text之前尝试用HasOwnProperty检查rowData是否具有属性:
for(var index in rowData)
{
if(rowData.hasOwnProperty(index)){
rowText += rowData[index];
}
}