【Ajax】--同一页面没法屡次使用XmlHttp发起Ajax请求的真实缘由

同一页面没法屡次使用XmlHttp发起Ajax请求的真实缘由   

当该页面第一次发出Ajax请求的时候能够正常运行,可是从第二次调用开始发现——onreadystatechange()事件再也没有被调用!
因而上Google查了一下,发现还有很多人为此感到困扰,并且发现不少人持有的是这个错误的观点:
他们说这是由于一个XmlHttp只能使用一次send(),每次要使用新的XmlHttp。可是个人XmlHttp是函数内的局部变量,函数执行完毕它就会被销毁啊,并且即便我在函数的开头把它赋值null也没有用。
/*而后我发现一个十分有意义的帖子
*/
原来是这个缘由,因为IE浏览器有缓存,第一次发送的Ajax请求确实被发送出去了,也接收到了回应,因此就触发了onreadystatechange()事件。可是从第二次起IE浏览器发现缓存里面已经有请求的页面,因而Ajax请求将再也不被发送出去,这样固然也不会触发onreadystatechange()事件了。因此只要我们在Url里加上+"&"+Math.random()就能够避免这个问题。当我作了这样修改后果然就能够在同一页面屡次使用XmlHttp发起Ajax请求了。接着我把xmlhttp = null删除掉也仍然能够正常运行了。
附代码以下:
<script type="text/javascript">
function createXHR() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    }
    if (window.ActiveXObject) {
        var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
        for (var i=0; i < msxmls.length; i++) {
            try {
                return new ActiveXObject(msxmls[i]+'.XMLHTTP')
            } catch (e) { }
        }
        throw new Error("No XML component installed!")
    }
}
</script>
<script type="text/javascript">
function refreshComment() {
    var xmlhttp = createXHR();
    var xmlhttpUrl = "flash.aspx?ajax=refresh&"+Math.random();
    xmlhttp.open("GET", xmlhttpUrl, true);
    xmlhttp.send(null);
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4) {
            if (xmlhttp.status == 200) {
//                alert("xmlhttp.status = " + xmlhttp.status);
//                alert("xmlhttp.readyState = " + xmlhttp.readyState);
               divCommentList.innerHTML=xmlhttp.responseText;
            }
        }
    }
}
</script>javascript

相关文章
相关标签/搜索