成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Ajax之readyState(狀態(tài)值)和status(狀態(tài)碼)的研究

oneasp / 1199人閱讀

摘要:狀態(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ān)文章

  • Ajax

    摘要:二技術(shù)的核心技術(shù)的核心是對象簡稱,使得瀏覽器可以發(fā)出請求與接收響應(yīng)。伴隨狀態(tài)碼的字符串信息。第二部分請求頭部,第二行至第六行。第四部分請求數(shù)據(jù),第八行。例子第一部分狀態(tài)行,由協(xié)議版本號,狀態(tài)碼,狀態(tài)消息三部分組成。 一、什么是Ajax Ajax的全稱是Asynchronous JavaScript and XML,即異步JavaScript+XML。 二、Ajax技術(shù)的核心 Ajax技...

    LuDongWei 評論0 收藏0
  • AJAX原理實現(xiàn)方式

    摘要:隨后也跟進抄襲了,取名,并被納入規(guī)范全稱翻譯成中文異步的和技術(shù)的核心是對象簡稱,可以在不刷新頁面頁面也能取得新的數(shù)據(jù)。注意請求和響應(yīng)都不包含信息。 JSONP發(fā)展 了解了JSONP技術(shù)棧后,知道了JSONP是AJAX出現(xiàn)之前后端交互最好的解決方案,但它依然沒解決問題,用JSONP只能發(fā)送GET請求,不能發(fā)其他請求 form表單可以發(fā)GET請求,也可以發(fā)POST請求,POST請求沒有請求...

    missonce 評論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(七)AjaxHttp狀態(tài)

    摘要:這類狀態(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)合使用...

    ningwang 評論0 收藏0
  • Ajax基礎(chǔ)知識梳理

    摘要:當(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)在服...

    XBaron 評論0 收藏0
  • Ajax 知識點那些事

    摘要:發(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、...

    wean 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<