我第二次调用它时函数失败

时间:2010-01-15 23:20:52

标签: javascript ajax

这是我的代码:

 <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

很奇怪,有什么问题吗?

3 个答案:

答案 0 :(得分:5)

loadingins的孩子是否可能被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,并在您下次调用此方法时重新显示它。