Выяснение, где разместить setInterval () в скрипте XmlHttpRequest - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть скрипт, который анализирует данные из XML-файла в две отдельные таблицы с помощью XmlHttpRequest.

Мне нужно вызвать функцию, которая сообщит веб-странице о перезагрузке данных каждые 30 секунд (30000 миллисекунд). Однако везде, где я пытался разместить функцию setInterval (), это просто приводит к нарушению кода.

Есть ли какое-либо функциональное место для установки здесь или есть другая функция, которая была бы более подходящей для этого типа скрипта?

<head>
<script>

    window.addEventListener("load", function() {
        getRows();
    });

    function getRows() {
        var xmlhttp = new XMLHttpRequest();
        xmlhttp.open("get", "test.xml", true);
        xmlhttp.onreadystatechange = function() {
            if (this.readyState == 4 && this.status == 200) {
                showResult(this);
            }
        };
        xmlhttp.send(null);
    }

    function showResult(xmlhttp) {
        var xmlDoc = xmlhttp.responseXML.documentElement;
        removeWhitespace(xmlDoc);
        var outputResult = document.getElementById("BodyRows");
        var rowData = xmlDoc.getElementsByTagName("Arena");
        var outputResult2 = document.getElementById("BodyRow");
        var rowData2 = xmlDoc.getElementsByTagName("Flag");

        addTableRowsFromXmlDoc(rowData,outputResult);
        addTableFlagsFromXmlDoc(rowData2, outputResult2);
    }

    function addTableRowsFromXmlDoc(xmlNodes,tableNode) {
        var theTable = tableNode.parentNode;
        var newRow, newCell, i;
        console.log ("Number of nodes: " + xmlNodes.length);
        for (i=0; i<xmlNodes.length; i++) {
            newRow = tableNode.insertRow(i);
            newRow.className = (i%2) ? "OddRow" : "EvenRow";
            for (j=0; j<xmlNodes[i].childNodes.length; j++) {
                newCell = newRow.insertCell(newRow.cells.length);
                if (xmlNodes[i].childNodes[j].firstChild) {
                    newCell.innerHTML = xmlNodes[i].childNodes[j].firstChild.nodeValue;
                } else {
                    newCell.innerHTML = "-";
                }
                console.log("cell: " + newCell);
            }
            }
            theTable.appendChild(tableNode);
    }

    function addTableFlagsFromXmlDoc(xmlNodes,tableNode) {
        var theTable = tableNode.parentNode;
        var newRow, newCell, i;
        console.log ("Number of nodes: " + xmlNodes.length);
        for (i=0; i<xmlNodes.length; i++) {
            newRow = tableNode.insertRow(i);
            newRow.className = (i%2) ? "OddRow" : "EvenRow";
            for (j=0; j<xmlNodes[i].childNodes.length; j++) {
                newCell = newRow.insertCell(newRow.cells.length);
                if (xmlNodes[i].childNodes[j].firstChild) {
                    newCell.innerHTML = xmlNodes[i].childNodes[j].firstChild.nodeValue;
                } else {
                    newCell.innerHTML = "-";
                }
                console.log("cell: " + newCell);
            }
            }
            theTable.appendChild(tableNode);
    }

    function removeWhitespace(xml) {
        var loopIndex;
        for (loopIndex = 0; loopIndex < xml.childNodes.length; loopIndex++)
        {
            var currentNode = xml.childNodes[loopIndex];
            if (currentNode.nodeType == 1)
            {
                removeWhitespace(currentNode);
            }
            if (!(/\S/.test(currentNode.nodeValue)) && (currentNode.nodeType == 3))
            {
                xml.removeChild(xml.childNodes[loopIndex--]);
            }
        }
    }

</script>
</head>
<body>
<table id="MainTable">
<tbody id="BodyRows"></tbody>
</table>
<table id="SecondTable">
<tbody id="BodyRow"></tbody>
</table>
</body>
...