Http status:0 也是一种日常ajax请求常见的错误,一般常见的200、500、404等都比较好理解,但是0这个在标准的http返回码中是不存在的
它其实是"XMLHttpRequest"的readyState的取值,只有readyState大于等于3时,才能拿到真正的http status,否则取http status应该抛出异常的,但是有些框架比如jquery对ajax请求进行了封装,会直接给status赋值。
状态 | 名称 | 描述 |
---|---|---|
0 | Uninitialized | 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。 |
1 | Open | open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。 |
2 | Sent | Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。 |
3 | Receiving | 所有响应头部都已经接收到。响应体开始接收但未完成。 |
4 | Loaded | HTTP 响应已经完全接收。 |
当我们得到Http status:0时,可能会是以下几种情况:
1. url路径或协议头错误
2. 网络断开
3. 防火墙拦截了请求
4. 跨域请求
5. 服务端响应前取消请求
通常需要注意的是2、3、4。出现这种情况时,应该重复请求,用浏览器直接访问请求以确认网络是否畅通,请求是否被防火墙拦截。
还可以借助大部分浏览器自带的开发人员工具 网络(Network)标签页、控制台(Console)标签页查看请求错误,如果是跨域请求会在控制台提示错误。如果是网络或防火墙问题会看到请求根本没发送、或服务器没返回。
另外还有403等错误也可能是防火墙或程序安全机制拦截。405则是请求的方法例如(POST、GET)等不被服务器支持。400则是参数解析错误,一般是程序处理时解析参数错误、也有可能是请求中包含部分不被允许的特殊字符,具体错误信息要结合服务器日志分析。
1条评论
不错的CMS系统,赞!
发表评论