在手动写js,运用xmlHttpRequest对象,来实现异步调用,可能会遇到像“完成该操作所需的数据还不可使用”这样的错误,尤其是在IE版本的浏览器中,更是容易导致此错误,虽然不伤大雅,但是有网页有脚本错误,总是不好的,做为兼前端和程序于一身的自己,自然不希望看到像此类的错误。一下就简单的分析下,导致此错误的几个原因及解决方案吧!
问题:
1、在xmlHttpRequest对象发送请求后,调用响应数据时,未对对象请求的状态做判断,易导致此错误的发生。
2、在判断了xmlHttpRequest状态的前提下,错误依旧。
解决方案:
方法一、诸如以上两个错误,的确是状态未判断时调用数据或是判断状态的顺序错误。进行如下判断,可以避免此类错误,如:if(xmlHttp.readyState==4){if(xmlHttp.status==200){}}(注意:两种不同状态的顺序,不要颠倒了);
方案二、自然是捕获异常,稍作处理,并在window.onerror事件中这样做:window.οnerrοr=function(){return false;}
以下是xmlHttpRequest对象readyState几种状态码所表示的不同含义:
0 (未初始化)
对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化)
对象已建立,尚未调用send方法
2 (发送数据)
send方法已调用,但是当前的状态及http头未知
3 (数据传送中)
已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成)
数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 长整形标准http状态码,定义如下:
Number
Description
100
Continue
101
Switching protocols
200
OK
201
Created
202
Accepted
203
Non-Authoritative Information
204
No Content
205
Reset Content
206
Partial Content
300
Multiple Choices
301
Moved Permanently
302
Found
303
See Other
304
Not Modified
305
Use Proxy
307
Temporary Redirect
400
Bad Request
401
Unauthorized
402
Payment Required
403
Forbidden
404
Not Found
405
Method Not Allowed
406
Not Acceptable
407
Proxy Authentication Required
408
Request Timeout
409
Conflict
410
Gone
411
Length Required
412
Precondition Failed
413
Request Entity Too Large
414
Request-URI Too Long
415
Unsupported Media Type
416
Requested Range Not Suitable
417
Expectation Failed
500
Internal Server Error
501
Not Implemented
502
Bad Gateway
503
Service Unavailable
504
Gateway Timeout
505
HTTP Version Not Supported