这是我的代码:
<script language="javascript">
function refresh() {
try {
xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {}
xmlhttp.onreadystatechange = triggered;
xmlhttp.open("GET", "data.php");
xmlhttp.send(null);
}
function triggered() {
if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
document.getElementById("ins").innerHTML = xmlhttp.responseText;
}
document.getElementById("loading").style.display = "block";
}
</script>
<a href="javascript:refresh();">Refresh List</a>
我第二次调用它时函数失败,
Error: document.getElementById("loading") is null
很奇怪,有什么问题吗?
答案 0 :(得分:5)
loading
是ins
的孩子是否可能被triggered()
覆盖?
答案 1 :(得分:1)
我不是javascript的专家,但我想:
对document.getElementById("loading")
的来电不仅限于xmlhttp.readyState==4
。
从0到4调用所有readyStates。如果该行
document.getElementById("ins").innerHTML = xmlhttp.responseText;
对页面进行重大更改(可能“删除”元素“loading”),以下
document.getElementById("loading").style.display = "block";
导致错误。
答案 2 :(得分:1)
从ins div的外部移动加载div:
<div id="loading"></div>
<div id="ins"></div>
并将javascript更改为以下内容:
function triggered() {
if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) {
document.getElementById("ins").innerHTML = xmlhttp.responseText;
}
document.getElementById("loading").style.display =
(xmlhttp.readyState == 4) ? "none" : "block";
}
这将在您完成时为您隐藏加载div,并在您下次调用此方法时重新显示它。