我正在尝试创建一个应用程序,该应用程序将显示并定期更改一段文本(如新闻文章或类似内容)。我希望数据来自xml文件,这样其他人就可以添加故事/删除旧故事等。我正在尝试让我的JavaScript用来自xml文件的数据填充单个html字段。然后在给定的时间之后,现在我们假设是4秒,它将更改为下一段数据。下面是我一直在尝试做的一个非常粗糙的版本:
HMTL:
<head>
<script src="script.js"></script>
</head>
<body>
<div id="text"></div>
</body>
XML:
<document>
<text>one</text>
<text>two</text>
<text>three</text>
</document>
JavaScript:
var timer = setInterval(addText,4000);
var xhttp = new XMLHttpRequest();
xhttp.onreadystaechange = function() {
if(this.readyState == 4 && this.status == 200) {
addText(this);
}
};
function addText(xml) {
var xmlDoc = xml.responseXML;
var count = 0;
var max = xmlDoc.GetElementsByTagName("text");
document.getElementById("text").innerHTML =
xmlDoc.getElementByTagName("text")[count].childNodes[0].nodeValue;
if (count < max.length) {
count++;
} else {
count = 0;
}
}
xhttp.open("GET", "XMLFile.xml",true);
xhttp.send();
我目前遇到的问题是,第一个xml字段填充成功,但随后我收到一个错误消息,显示为"Unable to get property 'responseXML' of undefined or null reference"
。
理想情况下,我还希望在每次函数执行时打开xml文档,这样,如果向xml文件中添加了额外的数据,应用程序就不必重新启动--如果这是有意义的(并且是可能的)
发布于 2016-09-13 15:30:17
您可以将addText
放在onreadystatechange
处理程序的范围内。就像这样。
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if(this.readyState == 4 && this.status == 200) {
var xmlDoc = this.responseXML;
var count = 0;
var xText = xmlDoc.getElementsByTagName("text");
var max = xText.length;
var docText = document.getElementById("text");
function addText() {
//docText, xText and count are available from parent scope
docText.innerHTML =
xText[(count++) % max].childNodes[0].nodeValue;
}
var timer = setInterval(addText,4000);
}
};
xhttp.open("GET", "XMLFile.xml",true);
xhttp.send();
https://stackoverflow.com/questions/39473091
复制