在調用AJAX的時候遇到了XMLHttpRequest. status為0 的情況,http協議里可是沒這個狀態碼的,眾所周知,XMLHttpRequest. Status為HTTP請求狀態碼,一般為1xx-5xx,這個0是什么含義,讓我覺得很好奇。
XMLHttpRequest 對象的三有個重要的屬性:
onreadystatechange
存儲函數(或函數名),每當 readyState 屬性改變時,就會調用該函數。
readyState
存有 XMLHttpRequest 的狀態。從 0 到 4 發生變化。
0: 請求未初始化
1: 服務器連接已建立
2: 請求已接收
3: 請求處理中
4: 請求已完成,且響應已就緒
status
200: "OK"
404: 未找到頁面
XMLHttpRequest status = 0 問題
最后翻啊翻啊,找啊找啊,終於找到一個XMLHttpRequest的說明
The status attribute must return the result of running these steps:
status的值一定會返回運行這些步驟的結果。
1、If the state is UNSENT or OPENED, return 0.(如果狀態是UNSENT或者OPENED,返回0)
2、If the error flag is set, return 0.(如果錯誤標簽被設置,返回0)
3、Return the HTTP status code.(返回HTTP狀態碼)
如果在HTTP返回之前就出現上面兩種情況,就出現0了。
后來我又查閱到了,0 代表本地響應成功。
先說兩個button,一個是url是:file:///E:/test2.html,另外一個是:http://www.baidu.com。第一個button的url訪問只是本地打開沒有通過服務器,自己可以用Wireshark捉包。
應該是xmlhttp自己在模擬,因為根本就沒通過服務器。本地直接打開而已。OPENED了,所以status為0。
第二個button的url訪問雖然是其他域名,抓包是有的,但是,這是跨域訪問了,
雖然去訪問了,應該是瀏覽器跨域的返回頭沒有允許,所以瀏覽器阻止,Access-Control-Allow-Origin這個屬性。所以status為0。