中文字幕日韩一区二区_国产一区二区av_国产毛片av_久久久久国产一区_色婷婷电影_国产一区二区精品

document.onreadystatechange事件的用法分析

這兩天,正在給部門(mén)的一個(gè)項(xiàng)目做優(yōu)化,其中一項(xiàng)是將web應(yīng)用中的所有alert用div方式實(shí)現(xiàn),Javascript的相關(guān)方法都寫(xiě)好了,方法名為showDialog,前臺(tái)頁(yè)面調(diào)用showDialog方法一點(diǎn)也沒(méi)有問(wèn)題,可是頁(yè)面一旦提交,從后臺(tái)輸出腳本,調(diào)用showDialog方法,就會(huì)時(shí)不時(shí)的出現(xiàn)問(wèn)題了,報(bào)一個(gè)無(wú)法打開(kāi)InterNET站點(diǎn)的錯(cuò)誤,在腳本中下斷點(diǎn)調(diào)試,依然找不到問(wèn)題的根源,最后到網(wǎng)上一查,這個(gè)問(wèn)題有可能是頁(yè)面沒(méi)有完全加載造成的,于是乎,修改后臺(tái)輸出腳本的代碼,將其改為
document.onreadystatechange=function() { if(document.readyState == 'complete'){ showDialog('來(lái)自網(wǎng)頁(yè)的消息','用戶(hù)名或密碼錯(cuò)誤,請(qǐng)重新輸入!','warning'); } };
問(wèn)題解決,一切OK!
復(fù)制代碼 代碼如下:
document.onreadystatechange = subSomething;//當(dāng)頁(yè)面加載狀態(tài)改變的時(shí)候執(zhí)行這個(gè)方法.
function subSomething()
{
if(document.readyState == "complete"){ //當(dāng)頁(yè)面加載狀態(tài)為完全結(jié)束時(shí)進(jìn)入
//你要做的操作。
}
}

說(shuō)明 :onreadystatechange 事件能辨識(shí)readyState 屬性的改變。

關(guān)于onreadystatechange屬性的一點(diǎn)疑問(wèn)
在編寫(xiě)Ajax方法的時(shí)候,我們經(jīng)常會(huì)寫(xiě)上類(lèi)似于這樣的代碼:
復(fù)制代碼 代碼如下:
<script type="text/Javascript">
var xmlHttp;
//創(chuàng)建一個(gè)XmlHttpRequeset對(duì)象
function createXMLHttpRequest()...{
if(window.ActiveXObject)...{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else if(window.XMLHttpRequest)...{
xmlHttp = new XMLHttpRequest();
}
}
//開(kāi)始一個(gè)請(qǐng)求
function startRequest()...{

createXMLHttpRequest();
xmlHttp.onreadystatechange = handlestatechange;
xmlHttp.open("GET", "SimpleRespose.xml", true);
xmlHttp.Send(null);
}

function handlestatechange()...{
if(xmlHttp.readyState == 4)...{//描述一種"已加載"狀態(tài);此時(shí),響應(yīng)已經(jīng)被完全接收。
if(xmlHttp.status == 200)...{//200表示成功收到
alert("The Server Replied with:" + xmlHttp.responseText)
}
}
}
</script>

第一次閱讀這段代碼的時(shí)候,我就感到了一點(diǎn)點(diǎn)不對(duì)勁,但是說(shuō)不出來(lái)什么地方不對(duì)勁。隨著對(duì)Ajax代碼的進(jìn)一步了解,這種感覺(jué)時(shí)刻伴隨著我。

后來(lái),我知道了這種感覺(jué)來(lái)自于什么地方。

看看startRequest函數(shù)。我們發(fā)現(xiàn)xmlHttp.onreadystatechange指向了一個(gè)函數(shù),這個(gè)函數(shù)是在xmlHttpRequest.readyState發(fā)生改變的時(shí)候觸發(fā)。我們?cè)賮?lái)看startRequest函數(shù),想象一下整個(gè)請(qǐng)求發(fā)送的步驟。現(xiàn)在我們點(diǎn)擊一個(gè)按鈕,觸發(fā)了一個(gè)startRequest函數(shù)。函數(shù)往下走,第一步是createXmlHttpRequest(),它的作用是創(chuàng)建一個(gè)xmlHttpRequest對(duì)象,當(dāng)它完畢的時(shí)候,xmlHttpRequest.readyState的值是0(window.alert跟蹤得到的),程序繼續(xù)往下走,xmlHttp.onreadystatechange = handlestatechange,因?yàn)闋顟B(tài)沒(méi)有改變(xmlHttpRequest.readyState的值是0),所以不觸發(fā)函數(shù),緊接著是Open()和Send(),那么,整個(gè)函數(shù)從頭到尾都應(yīng)該沒(méi)有觸發(fā)handlestatechange函數(shù)啊,但是為什么出來(lái)的結(jié)果是正確的呢?

后來(lái)我用window.alert跟蹤xmlHttp.readystate的變化,發(fā)現(xiàn)于原來(lái)它運(yùn)行的機(jī)制是這樣的。首先創(chuàng)建一個(gè)xmlHttpRequest的對(duì)象之后xmlHttp.readyState的值是0了,然后xmlHttp.onreadystatechange = handlestatechange沒(méi)有運(yùn)行。緊接著是open(),這個(gè)函數(shù)發(fā)生了之后xmlHttp.readyState的值是1了,那么就會(huì)有一個(gè)斷點(diǎn)在Open()函數(shù)處斷開(kāi),保留現(xiàn)場(chǎng),緊接著又返回到xmlHttp.onreadystatechange = handlestatechange運(yùn)行,然后再執(zhí)行Send()函數(shù),這個(gè)函數(shù)發(fā)生了之后xmlHttp.readyState的值是2了,接著又返回到xmlHttp.onreadystatechange = handlestatechange運(yùn)行。以此類(lèi)推。

瀏覽器因?yàn)椴荒苷嬲叵衩嫦驅(qū)ο竽敲淳幊蹋哉伊藗€(gè)折衷的辦法,但是這個(gè)辦法看起來(lái)不倫不類(lèi),想了半天,再跟一個(gè)同學(xué)一起討論,才得出這樣的一個(gè)結(jié)果。

JavaScript技術(shù)document.onreadystatechange事件的用法分析,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 欧美一区视频 | 国产精品明星裸体写真集 | 日韩av中文 | av官网在线 | 国产精品视频网 | 久久国产精品免费视频 | 国产精品一区2区 | 91精品国产乱码久久久久久久久 | 亚洲国产aⅴ成人精品无吗 欧美激情欧美激情在线五月 | 欧美在线一区二区三区 | 日韩久久久久 | 亚洲精品视频免费观看 | 91麻豆精品一区二区三区 | 红桃视频一区二区三区免费 | 欧美中文字幕一区二区三区亚洲 | 日日摸日日添日日躁av | 日韩视频在线一区 | 国产电影精品久久 | 欧美一级片在线播放 | 国产三级| 日韩欧美视频 | 国产综合网址 | 91观看 | 在线免费毛片 | 精品一区二区三区在线观看 | a黄视频 | 一区二区三区av | 青青草亚洲 | 国产亚洲成av人在线观看导航 | 亚洲一区二区三区四区五区午夜 | 九九热在线视频 | 91欧美精品成人综合在线观看 | 看片国产 | 超碰在线免费公开 | 四虎网站在线观看 | 久久久久99 | 成人性视频在线播放 | 午夜影院官网 | 久久久青草婷婷精品综合日韩 | 久久精品这里 | 青青艹在线视频 |