[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
生活随笔
收集整理的這篇文章主要介紹了
[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
| [原創(chuàng)]同一頁面無法多次使用XmlHttp發(fā)起Ajax請求的真實原因 |
| 小雨 發(fā)表于 2008-3-28 13:17:00 |
| /************* 作者:小雨(QQ群群號17639373) 聲明:本文完全原創(chuàng),非商業(yè)目的的轉載請回復注明轉載地址,謝絕商業(yè)性質轉載 *************/ 最近在一項任務中,團隊老大要求我使用Ajax避免影響用戶體驗,于是我開始了Ajax的征程,雖說Ajax本身不難,但是我還是遇到了一些問題:當該頁面第一次發(fā)出Ajax請求的時候可以正常運行,但是從第二次調用開始我驚奇的發(fā)現(xiàn)——onreadystatechange()事件再也沒有被調用! 于是我上Google查了一下,發(fā)現(xiàn)還有不少人為此感到困擾,而且發(fā)現(xiàn)很多人持有的是這個錯誤的觀點: 他們說這是因為一個XmlHttp只能使用一次send(),每次要使用新的XmlHttp。但是我的XmlHttp是函數(shù)內的局部變量,函數(shù)執(zhí)行完畢它就會被銷毀啊,而且即使我在函數(shù)的開頭把它賦值null也沒有用。 /*然后我發(fā)現(xiàn)一個十分有意義的帖子 */ 原來是這個原因,由于IE瀏覽器有緩存,第一次發(fā)送的Ajax請求確實被發(fā)送出去了,也接收到了回應,所以就觸發(fā)了onreadystatechange()事件。但是從第二次起IE瀏覽器發(fā)現(xiàn)緩存里面已經有請求的頁面,于是Ajax請求將不再被發(fā)送出去,這樣當然也不會觸發(fā)onreadystatechange()事件了。所以只要我們在Url里加上+"&"+Math.random()就可以避免這個問題。當我做了這樣修改后果真就可以在同一頁面多次使用XmlHttp發(fā)起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> |
總結
以上是生活随笔為你收集整理的[原创]同一页面无法多次使用XmlHttp发起Ajax请求的真实原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: asp.net ajax中文乱码的解决?
- 下一篇: 共治共创视角下的开放数据发展:趋势、挑战