記錄一個今天下午看到的源生ajax的readyState!=4的else錯誤
首先看一下我的頁面。
這是對應的ajaxToCheckHealth()代碼,正確源生寫法。如下所示。
展示效果如下圖所示。

發(fā)現(xiàn)一個特別好玩的事是,如果在源生代碼里寫上,else 即代碼如下所示。
?
我加了一下else 輸出了 請求接口錯誤之后。發(fā)現(xiàn)的的確確請求到了后臺,但是返回會調用三次else 不會再走if。也就是說這個ajax 永遠都無法成功!
提示如下所示。

提示框會輸出三次。沒太探究里面原因是為什么,因為畢竟現(xiàn)在已經(jīng)很少寫源生了,都是直接用的各種框架,類似于用jQuery的success直接就能調用。我猜是因為?readyState值的原因。
readyState有五種可能的值:
0 (未初始化):(XMLHttpRequest)對象已經(jīng)創(chuàng)建,但還沒有調用open()方法。
1 (載入):已經(jīng)調用open() 方法,但尚未發(fā)送請求。
2 (載入完成):請求已經(jīng)發(fā)送完成。
3 (交互):可以接收到部分響應數(shù)據(jù)。
4 (完成):已經(jīng)接收到了全部數(shù)據(jù),并且連接已經(jīng)關閉。
所以必須是http交互完成 readyState=4的時候 剛剛好前面值等于200 才算success一次http request。但是因為ajax是異步的, 所以一旦加上else的話,因為時間差的原因,導致if判斷無法成功。
當然了 以上只是我的猜測,不過我估計也八九不離十了,這也算記錄一下今天下午發(fā)生的好玩的事。好久不寫這段代碼了,就這么幾句話寫了好幾個小時。悲哀。T.T
標簽: