在手动写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 |
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 |