日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于onreadystatechange属性(转)

發布時間:2025/3/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于onreadystatechange属性(转) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關于onreadystatechange屬性(轉)

在編寫Ajax方法的時候,我們經常會寫上類似于這樣的代碼:
Javascript代碼
  • <script?type="text/javascript"> ??
  • var?xmlHttp; ??
  • //創建一個XmlHttpRequeset對象 ??
  • function?createXMLHttpRequest()...{ ??
  • ????if(window.ActiveXObject)...{ ??
  • ????????xmlHttp?=?new?ActiveXObject("Microsoft.XMLHTTP"); ??
  • ????} ??
  • ????else?if(window.XMLHttpRequest)...{ ??
  • ????????xmlHttp?=?new?XMLHttpRequest(); ??
  • ????} ??
  • } ??
  • //開始一個請求 ??
  • function?startRequest()...{ ??
  • ???? ??
  • ????createXMLHttpRequest(); ??
  • ????xmlHttp.onreadystatechange?=?handlestatechange; ??
  • ????xmlHttp.open("GET",?"SimpleRespose.xml",?true); ??
  • ????xmlHttp.Send(null); ??
  • }? ??
  • ??
  • function?handlestatechange()...{ ??
  • ????if(xmlHttp.readyState?==?4)...{//描述一種"已加載"狀態;此時,響應已經被完全接收。 ??
  • ????????if(xmlHttp.status?==?200)...{//200表示成功收到???????? ??
  • ????????????alert("The?Server?Replied?with:"?+?xmlHttp.responseText) ??
  • ????????} ??
  • ????} ??
  • }???????????? ??
  • </script>??
  • <script type="text/javascript"> var xmlHttp; //創建一個XmlHttpRequeset對象 function createXMLHttpRequest()...{if(window.ActiveXObject)...{xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}else if(window.XMLHttpRequest)...{xmlHttp = new XMLHttpRequest();} } //開始一個請求 function startRequest()...{createXMLHttpRequest();xmlHttp.onreadystatechange = handlestatechange;xmlHttp.open("GET", "SimpleRespose.xml", true);xmlHttp.Send(null); } function handlestatechange()...{if(xmlHttp.readyState == 4)...{//描述一種"已加載"狀態;此時,響應已經被完全接收。if(xmlHttp.status == 200)...{//200表示成功收到 alert("The Server Replied with:" + xmlHttp.responseText)}} } </script>

    第一次閱讀這段代碼的時候,我就感到了一點點不對勁,但是說不出來什么地方不對勁。隨著對Ajax代碼的進一步了解,這種感覺時刻伴隨著我。

    ??? 后來,我知道了這種感覺來自于什么地方。

    ??? 看看startRequest函數。我們發現xmlHttp.onreadystatechange指向了一個函數,這個函數是在xmlHttpRequest.readyState發生改變的時候觸發。我們再來看startRequest函數,想象一下整個請求發送的步驟。現在我們點擊一個按鈕,觸發了一個startRequest函數。函數往下走,第一步是createXmlHttpRequest(),它的作用是創建一個xmlHttpRequest對象,當它完畢的時候,xmlHttpRequest.readyState的值是0(window.alert跟蹤得到的),程序繼續往下走,xmlHttp.onreadystatechange = handlestatechange,因為狀態沒有改變(xmlHttpRequest.readyState的值是0),所以不觸發函數,緊接著是Open()和Send(),那么,整個函數從頭到尾都應該沒有觸發handlestatechange函數啊,但是為什么出來的結果是正確的呢?

    ??? 后來我用window.alert跟蹤xmlHttp.readystate的變化,發現于原來它運行的機制是這樣的。首先創建一個xmlHttpRequest的對象之后xmlHttp.readyState的值是0了,然后xmlHttp.onreadystatechange = handlestatechange沒有運行。緊接著是open(),這個函數發生了之后xmlHttp.readyState的值是1了,那么就會有一個斷點在Open()函數處斷開,保留現場,緊接著又返回到xmlHttp.onreadystatechange = handlestatechange運行,然后再執行Send()函數,這個函數發生了之后xmlHttp.readyState的值是2了,接著又返回到xmlHttp.onreadystatechange = handlestatechange運行。以此類推。

    ??? 瀏覽器因為不能真正地像面向對象那么編程,所以找了個折衷的辦法,但是這個辦法看起來不倫不類,想了半天,再跟一個同學一起討論,才得出這樣的一個結果。

    總結

    以上是生活随笔為你收集整理的关于onreadystatechange属性(转)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。