天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

document.onreadystatechange事件的用法分析

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

說明 :onreadystatechange 事件能辨識readyState 屬性的改變。

關(guān)于onreadystatechange屬性的一點疑問
在編寫Ajax方法的時候,我們經(jīng)常會寫上類似于這樣的代碼:
復(fù)制代碼 代碼如下:
<script type="text/Javascript">
var xmlHttp;
//創(chuàng)建一個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)...{//描述一種"已加載"狀態(tài);此時,響應(yīng)已經(jīng)被完全接收。
if(xmlHttp.status == 200)...{//200表示成功收到
alert("The Server Replied with:" + xmlHttp.responseText)
}
}
}
</script>

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

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

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

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

瀏覽器因為不能真正地像面向?qū)ο竽敲淳幊蹋哉伊藗€折衷的辦法,但是這個辦法看起來不倫不類,想了半天,再跟一個同學(xué)一起討論,才得出這樣的一個結(jié)果。

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

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

主站蜘蛛池模板: 暖暖日本手机免费完整版在线观看 | 国产亚洲精品久久77777 | 116美女写真成人午夜视频 | 野花日本韩国视频免费高清观看 | 日韩人妻无码精品久久中文字幕 | 手机在线观看mv网址 | 91精品在线国产 | 亚洲精品久久一区二区三区四区 | 国产偷抇久久精品A片蜜臀A | 国产女高清在线看免费观看 | 亚洲另类欧美综合在线 | 日本熟妇多毛XXXXX视频 | 亚洲日韩天堂在线中文字幕 | 亚洲成色爱我久久 | 久草热8精品视频在线观看 久草青青在线 | 人妻体内射精一区二区 | 99免费精品 | 亚洲青青青网伊人精品 | 校园男男高h小黄文 | 99久久免费只有精品 | 欧美最猛性XXX孕妇 欧美最猛性xxxxx亚洲精品 | 五月丁香啪啪. | 国产91网站在线观看免费 | 国产免费人成在线视频视频 | 性生大片免费看 | 琪琪SEE色原网色原网站18 | 88福利视频| 国产国产成人人免费影院 | 麻豆国产96在线日韩麻豆 | 国产 亚洲 另类 欧美 在线 | 少妇两个奶头喷出奶水了怎么办 | 2017欧美狠狠色 | 美女搞鸡网站 | 久久国产乱子伦免费精品 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 久久深夜视频 | 日本老妇一级特黄aa大片 | 色噜噜2017最新综合 | 无限资源在线完整高清观看1 | 国产精品色欲AV亚洲三区软件 | 伊人久久精品99热超碰 |