<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        jQuery Ajax的readyState和status的區別和使用詳解

        來源:懂視網 責編:小采 時間:2020-11-27 22:51:43
        文檔

        jQuery Ajax的readyState和status的區別和使用詳解

        jQuery Ajax的readyState和status的區別和使用詳解:在前幾篇分析了jquery的ajax異步和同步,以及異常的一些處理,感覺還沒有把ajax的readyState和status說清楚.今天就來說說ajax狀態的那點事。 jquery ajax函數源代碼是這樣的: var getXmlHttpRequest = function () { if (wi
        推薦度:
        導讀jQuery Ajax的readyState和status的區別和使用詳解:在前幾篇分析了jquery的ajax異步和同步,以及異常的一些處理,感覺還沒有把ajax的readyState和status說清楚.今天就來說說ajax狀態的那點事。 jquery ajax函數源代碼是這樣的: var getXmlHttpRequest = function () { if (wi

        在前幾篇分析了jquery的ajax異步和同步,以及異常的一些處理,感覺還沒有把ajax的readyState和status說清楚.今天就來說說ajax狀態的那點事。

        jquery ajax函數源代碼是這樣的:

        var getXmlHttpRequest = function () {
         if (window.XMLHttpRequest) {
         //主流瀏覽器提供了XMLHttpRequest對象
         return new XMLHttpRequest();
         }
         else if (window.ActiveXObject) {
         //低版本的IE瀏覽器沒有提供XMLHttpRequest對象
         //所以必須使用IE瀏覽器的特定實現ActiveXObject
         return new ActiveXObject("Microsoft.XMLHTTP");
         }
        };
        var xhr = getXmlHttpRequest();
        xhr.onreadystatechange = function () {
         if (xhr.readyState === 4 && xhr.status === 200) {
         //獲取成功后執行操作
         //數據在xhr.responseText
         }
        };
        xhr.open("TYPE", "URL", true);
        xhr.send("");

        什么是readyState

          readyState是XMLHttpRequest對象的一個屬性,用來標識當前XMLHttpRequest對象處于什么狀態。

          readyState總共有5個狀態值,分別為0~4,每個值代表了不同的含義,如下表所示:

          0    未初始化狀態:此時,已經創建了一個XMLHttpRequest對象

          1  準備發送狀態:此時,已經調用了XMLHttpRequest對象的open方法,并且XMLHttpRequest對象已經準備好將一個請求發送到服務器端

          2  已經發送狀態:此時,已經通過send方法把一個請求發送到服務器端,但是還沒有收到一個響應

          3  正在接收狀態:此時,已經接收到HTTP響應頭部信息,但是消息體部分還沒有完全接收到

          4  完成響應狀態:此時,已經完成了HTTP響應的接收

        什么是status

          status是XMLHttpRequest對象的一個屬性,表示響應的HTTP狀態碼。

          在HTTP1.1協議下,HTTP狀態碼總共可分為5大類,如下表所示:

          1XX    服務器收到請求,需要繼續處理。例如101狀態碼,表示服務器將通知客戶端使用更高版本的HTTP協議。

          2XX    請求成功。例如200狀態碼,表示請求所希望的響應頭或數據體將隨此響應返回。

          3XX    重定向。例如302狀態碼,表示臨時重定向,請求將包含一個新的URL地址,客戶端將對新的地址進行GET請求。

          4XX    客戶端錯誤。例如404狀態碼,表示客戶端請求的資源不存在。

          5XX    服務器錯誤。例如500狀態碼,表示服務器遇到了一個未曾預料的情況,導致了它無法完成響應,一般來說,這個問題會在程序代碼出錯時出現。

        拋出問題

          為什么onreadystatechange的函數實現要同時判斷readyState和status呢?

          我們知道 readyState === 4 已經表示了請求響應成功了,為什么還要后續的status呢?帶著問題,我們開始來做一些試驗吧。

        只使用readyState判斷

          javascript端的實現代碼如下:

        var getXmlHttpRequest = function () {
         if (window.XMLHttpRequest) {
         return new XMLHttpRequest();
         }
         else if (window.ActiveXObject) {
         return new ActiveXObject("Microsoft.XMLHTTP");
         }
        };
        var xhr = getXmlHttpRequest();
        xhr.onreadystatechange = function () {
         if (xhr.readyState === 4) {
         alert(xhr.responseText);
         }
        };
        xhr.open("GET", "/data.aspx", true);
        xhr.send("");

        我們在服務端拋出異常:

        public partial class data : System.Web.UI.Page
        {
         protected void Page_Load(object sender, EventArgs e)
         {
         throw new Exception("Error");
         }
        }

        運行javascript代碼,提示窗口出現了如下:

          服務響應出錯了,但還是返回了信息,這并不是我們想要的結果。打開Fiddler監控,可以看到data.aspx返回的是500響應,但由于只使用readystate做判斷,它不理會放回的結果是500還是200,只要響應成功返回了,就執行接下來的javascript代碼,結果將造成各種不可預料的錯誤。所以只使用readyState判斷是行不通的。

          換另外一個角度想,狀態碼返回200就表示這次響應是成功的了,那么是不是可以不使用readyState,單獨只使用status做判斷呢?好,帶著問題,繼續來做試驗吧。

        只使用status判斷

          javascript端的代碼實現如下:

        var getXmlHttpRequest = function () {
         if (window.XMLHttpRequest) {
         return new XMLHttpRequest();
         }
         else if (window.ActiveXObject) {
         return new ActiveXObject("Microsoft.XMLHTTP");
         }
        };
        var xhr = getXmlHttpRequest();
        xhr.onreadystatechange = function () {
         if (xhr.status === 200) {
         alert("readyState=" + xhr.readyState + xhr.responseText);
         }
        };
        xhr.open("GET", "/data.aspx", true);
        xhr.send("");

        事實上,結果卻不像預期那樣。響應碼確實是返回了200,但是總共彈出了3次窗口!第一次是“readyState=2”的窗口,第二次是“readyState=3Test”的窗口,第三次是“readyState=4Test”的窗口。由此,可見onreadystatechange函數的執行不是只在readyState變為4的時候觸發的,而是readyState的每次變化都會觸發,所以就出現了前面說的那種情況。可見,單獨使用status判斷也是行不通的。

        進一步思考

          由上面的試驗,我們可以知道判斷的時候readyState和status缺一不可。那么readyState和status的先后判斷順序會不會有影響呢?我們可以將status調到前面先判斷,代碼如 xhr.status === 200 && xhr.readyState === 4。

          事實上,這對于最終的結果是沒有影響的,但是中間的性能就不同了。由上一個試驗我們知道,readyState的每次變化都會觸發onreadystatechange函數,假如先判斷status,那么每次都會多判斷一次status的狀態。雖然性能上影響甚微,不過我們還是應該抱著追求極致代碼的想法,把readyState的判斷放在前面。

        以上所述是小編給大家介紹的jQuery Ajax的readyState和status的區別和使用詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        jQuery Ajax的readyState和status的區別和使用詳解

        jQuery Ajax的readyState和status的區別和使用詳解:在前幾篇分析了jquery的ajax異步和同步,以及異常的一些處理,感覺還沒有把ajax的readyState和status說清楚.今天就來說說ajax狀態的那點事。 jquery ajax函數源代碼是這樣的: var getXmlHttpRequest = function () { if (wi
        推薦度:
        標簽: 講解 詳解 區別和
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 一个人免费观看www视频| 亚洲精品无码久久久久APP| 在线观看免费无码视频| 免费看国产精品麻豆| 美女被爆羞羞网站免费| 免费一级毛片女人图片| 羞羞漫画登录页面免费| 免费在线观看毛片| 九九全国免费视频| 亚洲中文字幕无码久久综合网| av网站免费线看| 亚洲不卡av不卡一区二区| 久久久久久免费一区二区三区| 亚洲AV无码成人网站久久精品大| 久久国产乱子伦精品免费不卡| 精品亚洲成AV人在线观看| 最近中文字幕完整版免费高清| 亚洲成AV人片久久| 日韩免费视频网站| 男女男精品网站免费观看| 色噜噜亚洲精品中文字幕 | 亚洲视频免费观看| 国内精品免费麻豆网站91麻豆 | 最近免费最新高清中文字幕韩国| 亚洲日韩乱码久久久久久| 成人性生交大片免费看无遮挡 | 亚洲精品福利视频| 18禁免费无码无遮挡不卡网站| 久久精品国产亚洲AV天海翼 | 国产在线19禁免费观看国产| 国产VA免费精品高清在线| 亚洲AV无码乱码在线观看富二代 | 亚洲欧洲日产国码www| 黑人粗长大战亚洲女2021国产精品成人免费视频 | 国产无遮挡无码视频免费软件 | 久久综合AV免费观看| 日韩成人毛片高清视频免费看| 亚洲成在人线av| 成年性生交大片免费看| 国产99精品一区二区三区免费| 亚洲视频在线观看网址|