Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么会这样';未定义';_Javascript_Php_Arrays - Fatal编程技术网

Javascript 为什么会这样';未定义';

Javascript 为什么会这样';未定义';,javascript,php,arrays,Javascript,Php,Arrays,我在PHP中有一个名为$jsonRankings的数组。这是一个索引数组,每个元素都包含一些utf8编码的HTML 我将此数组加载到另一个包含其他数据的数组中: $sumArray['rankings'] = $jsonRankings; 我已经打印了这个数组,并验证它只包含我需要的数据,索引从0开始 我的PHP文件的输出如下: echo json_encode($sumArray); 以下是我的javascript: function getScores(){ var xmlhttp;

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

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

$sumArray['rankings'] = $jsonRankings;
我已经打印了这个数组,并验证它只包含我需要的数据,索引从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();
基本上,该脚本每秒运行一次,并更新页面上的一组值,包括更改(表体)标记的内容,插入需要的任何行


这一切都很好地工作,除了我的表体总是有“未定义”作为第一行。我真的不明白为什么。

您可能在rowData上有一个函数,所以在添加到文本之前,请尝试使用HasOwnProperty检查rowData是否具有该属性:

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

您可能对rowData有一个函数,因此在添加到文本之前,请尝试使用HasOwnProperty检查rowData是否具有该属性:

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

我猜
rowText
未定义的

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
将是
未定义的

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;
给它一个空字符串的初始值更有意义,它应该给你一个空字符串,而不是
未定义的

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;

另外,看一下。

我猜
行文本
未定义的

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
将是
未定义的

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;
给它一个空字符串的初始值更有意义,它应该给你一个空字符串,而不是
未定义的

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;

另外,请查看。

将其分解为问题:

var rowText;         //undefined
rowText += "Hello";  //undefined + "Hello";
console.log(rowText);   //"undefined Hello"
如果将其设置为空字符串,则未定义的问题将消失

var rowText = "";

将其分解为问题:

var rowText;         //undefined
rowText += "Hello";  //undefined + "Hello";
console.log(rowText);   //"undefined Hello"
如果将其设置为空字符串,则未定义的问题将消失

var rowText = "";

你不应该这样滥用
innerHTML
。使用
textContent
而不是JSON实际上是什么样子?您应该能够从浏览器的网络调试控制台进行检查。您如何使用
$.parseJSON
?页面上有
jQuery
吗?如果是这样的话,你到底为什么不使用jQuery来发出AJAX请求呢?我意识到从web复制和粘贴脚本很容易。但是请仔细看看。没有理由支持IE5/6,是吗?您刚刚从2008年的教程中复制了xhr代码?您不应该这样滥用
innerHTML
。使用
textContent
而不是JSON实际上是什么样子?您应该能够从浏览器的网络调试控制台进行检查。您如何使用
$.parseJSON
?页面上有
jQuery
吗?如果是这样的话,你到底为什么不使用jQuery来发出AJAX请求呢?我意识到从web复制和粘贴脚本很容易。但是请仔细看看。没有理由支持IE5/6,是吗?您刚刚从2008年的教程中复制了xhr代码?-1没有解释(
尝试此
不会解释您所做的事情)-1没有解释(
尝试此
不会解释您所做的事情)