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