當該頁面第一次發出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