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