记录一个今天下午看到的源生ajax的readyState!=4的else错误
首先看一下我的页面。
这是对应的ajaxToCheckHealth()代码,正确源生写法。如下所示。
展示效果如下图所示。

发现一个特别好玩的事是,如果在源生代码里写上,else 即代码如下所示。
我加了一下else 输出了 请求接口错误之后。发现的的确确请求到了后台,但是返回会调用三次else 不会再走if。也就是说这个ajax 永远都无法成功!
提示如下所示。

提示框会输出三次。没太探究里面原因是为什么,因为毕竟现在已经很少写源生了,都是直接用的各种框架,类似于用jQuery的success直接就能调用。我猜是因为 readyState值的原因。
readyState有五种可能的值:
0 (未初始化):(XMLHttpRequest)对象已经创建,但还没有调用open()方法。
1 (载入):已经调用open() 方法,但尚未发送请求。
2 (载入完成):请求已经发送完成。
3 (交互):可以接收到部分响应数据。
4 (完成):已经接收到了全部数据,并且连接已经关闭。
所以必须是http交互完成 readyState=4的时候 刚刚好前面值等于200 才算success一次http request。但是因为ajax是异步的, 所以一旦加上else的话,因为时间差的原因,导致if判断无法成功。
当然了 以上只是我的猜测,不过我估计也八九不离十了,这也算记录一下今天下午发生的好玩的事。好久不写这段代码了,就这么几句话写了好几个小时。悲哀。T.T