今天在测试程序的时候,发现xmlhttp.readyState一直为1,这种情况很奇怪,我一直没遇到过。开始我以为是用ActiveXObject('Microsoft.XMLHTTP') 创建的xmlhttp对象不对,于是改变用其他的协议来创建对象,MSXML2.XMLHTTP、 MSXML3.XMLHTTP等,但无一有效。
xmlhttp.readyState=1是什么意思呢?为什么会出现这样的问题?怎么解决?带着一连串的疑问,开始查阅有关资料。
如下是xmlhttp.readyState的详细解释:
xmlhttp.readyState=0
(未初始化) 对象已建立,但是尚未初始化(尚未调用open方法)
xmlhttp.readyState=1
(初始化) 对象已建立,尚未调用send方法
xmlhttp.readyState=2
(发送数据) send方法已调用,但是当前的状态及http头未知
xmlhttp.readyState=3
(数据传送中) 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误
xmlhttp.readyState=4
(完成) 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
由此可见,是调用send方法不成功,已经调用了open方法。看来,问题出现在open这里了。open的写法是xmlhttp.open("GET",url,true),并没有发现有什么不对!见鬼了!
我尝试把true改为false。注,true为异步,即不等数据全部接收完就进行下一步;false为同步,等接收完数据才进行下一步。有关同步与异步的解释,请看软件编程中同步与异步的区别。令我意想不到的是,这样竟然可以调用send方法了,xmlhttp.readyState不一直为1了,检测到有2、3、4的状态了。
出现这种情况,我觉得是url的问题,xmlhttp调用open方法时,遇到很难请求的url,导致xmlhttp.readyState一直为1,这与网络有很大关系。遇到这种情况,可以改变下open的url来检测,或者改变下测试环境,把程序放到其他的机器来测试,看是否环境导致的问题。
☉xmlhttp实现无刷新获取数据 (2009-9-12 23:36:45)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。