今天在測(cè)試程序的時(shí)候,發(fā)現(xiàn)xmlhttp.readyState一直為1,這種情況很奇怪,我一直沒(méi)遇到過(guò)。開(kāi)始我以為是用ActiveXObject('Microsoft.XMLHTTP') 創(chuàng)建的xmlhttp對(duì)象不對(duì),于是改變用其他的協(xié)議來(lái)創(chuàng)建對(duì)象,MSXML2.XMLHTTP、 MSXML3.XMLHTTP等,但無(wú)一有效。
xmlhttp.readyState=1是什么意思呢?為什么會(huì)出現(xiàn)這樣的問(wèn)題?怎么解決?帶著一連串的疑問(wèn),開(kāi)始查閱有關(guān)資料。
如下是xmlhttp.readyState的詳細(xì)解釋:
xmlhttp.readyState=0
(未初始化) 對(duì)象已建立,但是尚未初始化(尚未調(diào)用open方法)
xmlhttp.readyState=1
(初始化) 對(duì)象已建立,尚未調(diào)用send方法
xmlhttp.readyState=2
(發(fā)送數(shù)據(jù)) send方法已調(diào)用,但是當(dāng)前的狀態(tài)及http頭未知
xmlhttp.readyState=3
(數(shù)據(jù)傳送中) 已接收部分?jǐn)?shù)據(jù),因?yàn)轫憫?yīng)及http頭不全,這時(shí)通過(guò)responseBody和responseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤
xmlhttp.readyState=4
(完成) 數(shù)據(jù)接收完畢,此時(shí)可以通過(guò)通過(guò)responseBody和responseText獲取完整的回應(yīng)數(shù)據(jù)
由此可見(jiàn),是調(diào)用send方法不成功,已經(jīng)調(diào)用了open方法??磥?lái),問(wèn)題出現(xiàn)在open這里了。open的寫法是xmlhttp.open("GET",url,true),并沒(méi)有發(fā)現(xiàn)有什么不對(duì)!見(jiàn)鬼了!
我嘗試把true改為false。注,true為異步,即不等數(shù)據(jù)全部接收完就進(jìn)行下一步;false為同步,等接收完數(shù)據(jù)才進(jìn)行下一步。有關(guān)同步與異步的解釋,請(qǐng)看軟件編程中同步與異步的區(qū)別。令我意想不到的是,這樣竟然可以調(diào)用send方法了,xmlhttp.readyState不一直為1了,檢測(cè)到有2、3、4的狀態(tài)了。
出現(xiàn)這種情況,我覺(jué)得是url的問(wèn)題,xmlhttp調(diào)用open方法時(shí),遇到很難請(qǐng)求的url,導(dǎo)致xmlhttp.readyState一直為1,這與網(wǎng)絡(luò)有很大關(guān)系。遇到這種情況,可以改變下open的url來(lái)檢測(cè),或者改變下測(cè)試環(huán)境,把程序放到其他的機(jī)器來(lái)測(cè)試,看是否環(huán)境導(dǎo)致的問(wèn)題。