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