在手动写js,运用xmlHttpRequest对象,来实现异步调用,可能会遇到像“完成该操作所需的数据还不可使用”这样的错误,尤其是在IE版本的浏览器中,更是容易导致此错误,虽然不伤大雅,但是有网页有脚本错误,总是不好的,做为兼前端和程序于一身的自己,自然不希望看到像此类的错误。一下就简单的分析下,导致此错误的几个原因及解决方案吧!
问题:
1、在xmlHttpRequest对象发送请求后,调用响应数据时,未对对象请求的状态做判断,易导致此错误的发生。
2、在判断了xmlHttpRequest状态的前提下,错误依旧。
解决方案:
方法一、诸如以上两个错误,的确是状态未判断时调用数据或是判断状态的顺序错误。进行如下判断,可以避免此类错误,如:if(xmlHttp.readyState==4){if(xmlHttp.status==200){}}(注意:两种不同状态的顺序,不要颠倒了);
方案二、自然是捕获异常,稍作处理,并在window.onerror事件中这样做:window.onerror=function(){return false;}
以下是xmlHttpRequest对象readyState几种状态码所表示的不同含义:
0 (未初始化) | 对象已建立,但是尚未初始化(尚未调用open方法) |
1 (初始化) | 对象已建立,尚未调用send方法 |
2 (发送数据) | send方法已调用,但是当前的状态及http头未知 |
3 (数据传送中) | 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误, |
4 (完成) | 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 |
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 |
Moved Permanently |
|
302 |
Found |
303 |
See Other |
304 |
Not Modified |
305 |
Use Proxy |
307 |
Temporary Redirect |
400 |
Bad Request |
401 |
Unauthorized |
402 |
Payment required |
Forbidden |
|
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 |
Bad Gateway |
|
503 |
Service Unavailable |
504 |
Gateway Timeout |
505 |
HTTP Version Not Supported |