摘要:狀態(tài)值和狀態(tài)碼的區(qū)別,是指運行所經(jīng)歷過的幾種狀態(tài),無論訪問是否成功都將響應(yīng)的步驟,可以理解成為運行步驟,使用獲得。
var xhr = createXHR(); xhr.onreadystatechange =function(){ if (xhr.readyState==4) { if ((xhr.status>=200&&xhr.status<300)||xhr.status==304) { alert(xhr.responseText); }else { alert("Request was unsuccessful:"+xhr.status); } } }; xhr.open("get","http://120.78.164.247:9999/user/findAll", false); xhr.send(null);
1.Ajax:readyState(狀態(tài)值)和status(狀態(tài)碼)的區(qū)別
readyState,是指運行Ajax所經(jīng)歷過的幾種狀態(tài),無論訪問是否成功都將響應(yīng)的步驟,可以理解成為Ajax運行步驟,使用“ajax.readyState”獲得。
status,是指無論Ajax訪問是否成功,由http協(xié)議根據(jù)所提交的信息,服務(wù)器所返回的http頭信息代碼,使用“ajax.status”獲得。
總體理解:可以簡單的理解為state代表一個整體的狀態(tài)。而status是這個大的state下面具體的小的狀態(tài)。
2.什么是readyState
readyState是XMLHttpRequest對象的一個屬性,用來標識當(dāng)前XMLHttpRequest對象處于什么狀態(tài)。
readyState總共有5個狀態(tài)值,分別為0~4,每個值代表了不同的含義。
0:初始化,XMLHttpRequest對象還沒有完成初始化 1:載入,XMLHttpRequest對象開始發(fā)送請求 2:載入完成,XMLHttpRequest對象的請求發(fā)送完成 3:解析,XMLHttpRequest對象開始讀取服務(wù)器的響應(yīng) 4:完成,XMLHttpRequest對象讀取服務(wù)器響應(yīng)結(jié)束
3.什么是status
status是XMLHttpRequest對象的一個屬性,表示響應(yīng)的http狀態(tài)碼
在http1.1協(xié)議下,http狀態(tài)碼總共可分為5大類
1xx:信息響應(yīng)類,表示接收到請求并且繼續(xù)處理 2xx:處理成功響應(yīng)類,表示動作被成功接收、理解和接受 3xx:重定向響應(yīng)類,為了完成指定的動作,必須接受進一步處理 4xx:客戶端錯誤,客戶請求包含語法錯誤或者是不能正確執(zhí)行 5xx:服務(wù)端錯誤,服務(wù)器不能正確執(zhí)行一個正確的請求 100——客戶必須繼續(xù)發(fā)出請求 101——客戶要求服務(wù)器根據(jù)請求轉(zhuǎn)換HTTP協(xié)議版本 200——交易成功 201——提示知道新文件的URL 202——接受和處理、但處理未完成 203——返回信息不確定或不完整 204——請求收到,但返回信息為空 205——服務(wù)器完成了請求,用戶代理必須復(fù)位當(dāng)前已經(jīng)瀏覽過的文件 206——服務(wù)器已經(jīng)完成了部分用戶的GET請求 300——請求的資源可在多處得到 301——刪除請求數(shù)據(jù) 302——在其他地址發(fā)現(xiàn)了請求數(shù)據(jù) 303——建議客戶訪問其他URL或訪問方式 304——客戶端已經(jīng)執(zhí)行了GET,但文件未變化 305——請求的資源必須從服務(wù)器指定的地址得到 306——前一版本HTTP中使用的代碼,現(xiàn)行版本中不再使用 307——申明請求的資源臨時性刪除 400——錯誤請求,如語法錯誤 401——請求授權(quán)失敗 402——保留有效ChargeTo頭響應(yīng) 403——請求不允許 404——沒有發(fā)現(xiàn)文件、查詢或URl 405——用戶在Request-Line字段定義的方法不允許 406——根據(jù)用戶發(fā)送的Accept拖,請求資源不可訪問 407——類似401,用戶必須首先在代理服務(wù)器上得到授權(quán) 408——客戶端沒有在用戶指定的餓時間內(nèi)完成請求 409——對當(dāng)前資源狀態(tài),請求不能完成 410——服務(wù)器上不再有此資源且無進一步的參考地址 411——服務(wù)器拒絕用戶定義的Content-Length屬性請求 412——一個或多個請求頭字段在當(dāng)前請求中錯誤 413——請求的資源大于服務(wù)器允許的大小 414——請求的資源URL長于服務(wù)器允許的長度 415——請求資源不支持請求項目格式 416——請求中包含Range請求頭字段,在當(dāng)前請求資源范圍內(nèi)沒有range指示值,請求也不包含If-Range請求頭字段 417——服務(wù)器不滿足請求Expect頭字段指定的期望值,如果是代理服務(wù)器,可能是下一級服務(wù)器不能滿足請求 500——服務(wù)器產(chǎn)生內(nèi)部錯誤 501——服務(wù)器不支持請求的函數(shù) 502——服務(wù)器暫時不可用,有時是為了防止發(fā)生系統(tǒng)過載 503——服務(wù)器過載或暫停維修 504——關(guān)口過載,服務(wù)器使用另一個關(guān)口或服務(wù)來響應(yīng)用戶,等待時間設(shè)定值較長 505——服務(wù)器不支持或拒絕支請求頭中指定的HTTP版本
思考問題:為什么onreadystatechange的函數(shù)實現(xiàn)要同時判斷readyState和status呢?
第一種思考方式:只使用readyState判斷
var xhr = createXHR(); xhr.onreadystatechange =function(){ if (xhr.readyState==4) { alert(xhr.responseText); }else { alert("Request was unsuccessful:"+xhr.status); } }; xhr.open("get","http://120.78.164.247:9999/user/findAll", false); xhr.send(null);
服務(wù)響應(yīng)出錯了,但還是返回了信息,這并不是我們想要的結(jié)果。如果返回不是200,而是404或者500,由于只使用readystate做判斷,它不理會放回的結(jié)果是200、404還是500,只要響應(yīng)成功返回了,就執(zhí)行接下來的javascript代碼,結(jié)果將造成各種不可預(yù)料的錯誤。所以只使用readyState判斷是行不通的。
第二種思考方式:只使用status判斷
var xhr = createXHR(); xhr.onreadystatechange =function(){ if ((xhr.status>=200&&xhr.status<300)||xhr.status==304) { alert(xhr.responseText); }else { alert("Request was unsuccessful:"+xhr.status); } }; xhr.open("get","http://120.78.164.247:9999/user/findAll", false); xhr.send(null);
事實上,結(jié)果并不像預(yù)期那樣。響應(yīng)碼確實是返回了200,但是總共彈出了3次窗口!第一次是“readyState=2”的窗口,第二次是“readyState=3”的窗口,第三次是“readyState=4”的窗口。由此,可見onreadystatechange函數(shù)的執(zhí)行不是只在readyState變?yōu)?的時候觸發(fā)的,而是readyState(2、3、4)的每次變化都會觸發(fā),所以就出現(xiàn)了前面說的那種情況??梢?,多帶帶使用status判斷也是行不通的。
5.由上面的試驗,我們可以知道判斷的時候readyState和status缺一不可。那么readyState和status的先后判斷順序會不會有影響呢?我們可以將status調(diào)到前面先判斷。
事實上,這對于最終的結(jié)果是沒有影響的,但是中間的性能就不同了。由試驗我們知道,readyState的每次變化都會觸發(fā)onreadystatechange函數(shù),假如先判斷status,那么每次都會多判斷一次status的狀態(tài)。雖然性能上影響甚微,不過還是應(yīng)該抱著追求極致代碼的想法,把readyState的判斷放在前面。
祝大家早日富可敵國,bye~
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/98302.html
摘要:隨后也跟進抄襲了,取名,并被納入規(guī)范全稱翻譯成中文異步的和技術(shù)的核心是對象簡稱,可以在不刷新頁面頁面也能取得新的數(shù)據(jù)。注意請求和響應(yīng)都不包含信息。 JSONP發(fā)展 了解了JSONP技術(shù)棧后,知道了JSONP是AJAX出現(xiàn)之前后端交互最好的解決方案,但它依然沒解決問題,用JSONP只能發(fā)送GET請求,不能發(fā)其他請求 form表單可以發(fā)GET請求,也可以發(fā)POST請求,POST請求沒有請求...
摘要:這類狀態(tài)碼代表了客戶端看起來可能發(fā)生錯誤,妨礙了服務(wù)器的處理。 Ajax及其工作原理 AJAX 是一種與服務(wù)器交換數(shù)據(jù)無需刷新網(wǎng)頁的技術(shù),最早由Google公司在谷歌地圖里使用,并迅速風(fēng)靡。 AJAX是不能跨域的,如需跨域,可以使用document.domain=a.com;或者使用服務(wù)器代理,代理XMLHttpRequest文件 AJAX是基于現(xiàn)有的Internet標準,并且聯(lián)合使用...
摘要:當(dāng)客戶端收到以上信息后,首先要判斷狀態(tài)碼來確認響應(yīng)是否成功,狀態(tài)碼在之間表示請求成功,同時代表請求資源未被修改,可使用瀏覽器本地緩存。校驗狀態(tài)碼輸出響應(yīng)的文本打印其他狀態(tài)碼發(fā)送異步請求如果將方法的第三個參數(shù)設(shè)為,即為異步請求。 Ajax用一句話來說就是無須刷新頁面即可從服務(wù)器取得數(shù)據(jù)。注意,雖然Ajax翻譯過來叫異步JavaScript與XML,但是獲得的數(shù)據(jù)不一定是XML數(shù)據(jù),現(xiàn)在服...
摘要:發(fā)送后等待服務(wù)端響應(yīng),響應(yīng)是以觸發(fā)事件來通知,隨后通過請求對象實例拿到狀態(tài)以及響應(yīng)的內(nèi)容。表示服務(wù)器響應(yīng)內(nèi)容的文本形式。而是在調(diào)用發(fā)出后,被調(diào)用者通過觸發(fā)事件,調(diào)用事件處理回調(diào)函數(shù)。 Ajax是什么 AJAX即Asynchronous JavaScript and XML(異步的JavaScript與XML技術(shù)),指的是一套綜合了多項技術(shù)的瀏覽器端網(wǎng)頁開發(fā)技術(shù),包含了HTML、CSS、...
閱讀 2284·2021-11-23 09:51
閱讀 1073·2021-11-18 10:02
閱讀 3476·2021-10-13 09:49
閱讀 1308·2021-09-22 14:57
閱讀 10787·2021-08-18 10:20
閱讀 1215·2019-08-30 15:55
閱讀 2264·2019-08-29 16:06
閱讀 3263·2019-08-29 11:14