欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

document.onreadystatechange事件的用法分析

 更新時(shí)間:2009年10月17日 17:00:19   作者:  
這里主要介紹document.onreadystatechange事件的使用方法, 一般多用于實(shí)時(shí)監(jiān)控用戶的輸入
這兩天,正在給部門(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è)的消息','用戶名或密碼錯(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ā)送的步驟?,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é)果。

相關(guān)文章

  • 詳解Javascript事件驅(qū)動(dòng)編程

    詳解Javascript事件驅(qū)動(dòng)編程

    這篇文章主要為大家詳細(xì)介紹了Javascript事件驅(qū)動(dòng)編程的相關(guān)資料,通過(guò)經(jīng)典案例向大家介紹Javascript事件驅(qū)動(dòng)編程,需要的朋友可以參考下
    2016-01-01
  • js toFixed()方法的重寫(xiě)實(shí)現(xiàn)精度的統(tǒng)一

    js toFixed()方法的重寫(xiě)實(shí)現(xiàn)精度的統(tǒng)一

    凡用過(guò)js 中的toFix() 方法的, 應(yīng)該都知道這個(gè)方法存在一個(gè)小小的BUG,在IE 下和FF 下對(duì)于小數(shù)的進(jìn)位有點(diǎn)不同
    2014-03-03
  • 學(xué)習(xí)使用Bootstrap柵格系統(tǒng)

    學(xué)習(xí)使用Bootstrap柵格系統(tǒng)

    這篇文章主要教大家學(xué)習(xí)使用Bootstrap柵格系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 微信小程序?qū)崿F(xiàn)多張圖片上傳功能

    微信小程序?qū)崿F(xiàn)多張圖片上傳功能

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)多張圖片上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JS實(shí)現(xiàn)簡(jiǎn)單Tab欄切換案例

    JS實(shí)現(xiàn)簡(jiǎn)單Tab欄切換案例

    這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)簡(jiǎn)單Tab欄切換案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • JavaScript中淺講ajax圖文詳解

    JavaScript中淺講ajax圖文詳解

    ajax對(duì)于各位來(lái)說(shuō),應(yīng)該都不陌生,正因?yàn)閍jax的產(chǎn)生,導(dǎo)致前臺(tái)頁(yè)面和服務(wù)器之間的數(shù)據(jù)傳輸變得非常容易,同時(shí)還可以實(shí)現(xiàn)頁(yè)面的局部刷新。本文圖文并茂給大家介紹了js中ajax知識(shí),需要的朋友一起學(xué)習(xí)吧
    2016-11-11
  • js實(shí)現(xiàn)年月日表單三級(jí)聯(lián)動(dòng)

    js實(shí)現(xiàn)年月日表單三級(jí)聯(lián)動(dòng)

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)年月日表單三級(jí)聯(lián)動(dòng),生日欄表單三級(jí)聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • 簡(jiǎn)單實(shí)現(xiàn)節(jié)流函數(shù)和防抖函數(shù)過(guò)程解析

    簡(jiǎn)單實(shí)現(xiàn)節(jié)流函數(shù)和防抖函數(shù)過(guò)程解析

    這篇文章主要介紹了簡(jiǎn)單實(shí)現(xiàn)節(jié)流函數(shù)和防抖函數(shù)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • ESLint和Jest中使用esm示例詳解

    ESLint和Jest中使用esm示例詳解

    這篇文章主要為大家介紹了ESLint和Jest中使用esm示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Auto.JS實(shí)現(xiàn)抖音刷寶等刷視頻app,自動(dòng)點(diǎn)贊,自動(dòng)滑屏,自動(dòng)切換視頻功能

    Auto.JS實(shí)現(xiàn)抖音刷寶等刷視頻app,自動(dòng)點(diǎn)贊,自動(dòng)滑屏,自動(dòng)切換視頻功能

    auto.js是一個(gè)支持無(wú)障礙服務(wù)的Android平臺(tái)上的JavaScript IDE,可以編寫(xiě)各種自動(dòng)化腳本,這篇文章主要介紹了Auto.JS實(shí)現(xiàn)抖音刷寶等刷視頻app,自動(dòng)點(diǎn)贊,自動(dòng)滑屏,自動(dòng)切換視頻功能,需要的朋友可以參考下
    2020-05-05

最新評(píng)論