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