<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
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        原生JS封裝AJAX方法

        來源:懂視網 責編:小采 時間:2020-11-27 14:04:52
        文檔

        原生JS封裝AJAX方法

        原生JS封裝AJAX方法:Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下面我們看一下它的內部原理,并手動封裝一個自己的Ajax庫。一、原理原生Ajax的發送需要四步:1) 創建Ajax對象: XMLHttpRequest2) 設置請求參數: open(請求參數[get/post],ur
        推薦度:
        導讀原生JS封裝AJAX方法:Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下面我們看一下它的內部原理,并手動封裝一個自己的Ajax庫。一、原理原生Ajax的發送需要四步:1) 創建Ajax對象: XMLHttpRequest2) 設置請求參數: open(請求參數[get/post],ur

        Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下面我們看一下它的內部原理,并手動封裝一個自己的Ajax庫。

        一、原理

        原生Ajax的發送需要四步:

        1) 創建Ajax對象: XMLHttpRequest

        2) 設置請求參數: open(請求參數[get/post],url地址, 是否異步[true/false] )

        3) 設置回調函數: onreadystateChange 用于處理返回的數據

        4) 發送請求: send()

        //TODO step1: 創建ajax對象
        var xhr = new XMLHttpRequest();
        //TODO step2: 設置請求參數
        xhr.open('get','01.php',true);
        //TODO step3: 設置回調
        xhr.onreadystatechange = function () {
         //接收返回數據
         console.log(xhr.responseText);//responseText 用于接收后臺響應的文本
        }
        //TODO step4: 發送請求
        xhr.send();

        二、封裝

        封裝的核心思想就是把需要動態變化的部分當成參數,不變的部分就留在那里,在上面的代碼中請求方式(get、post)、請求地址url、請求參數data、成功的回調success、失敗回調error等,這些參數都是動態變化的;而創建Ajax對象 XMLHttprequest、事件監聽onreadystatechange等是固定的,所以第一步我們要確定好封裝的參數:

        v url 請求地址

        v data 請求數據

        v type 請求類型

        v success 成功回調

        v error 失敗回調

        v beforeSend 發送前調用 return false 阻止發送

        v complete ajax請求成功的回調, 無論什么時候都會執行

        function ajax(option){
         //用戶配置option 默認配置init
         var init = {
         type:'get',
         async:true,
         url:'',
         success: function () { },
         error: function () { },
         data:{},
         beforeSend: function () {
         console.log('發送前...');
         return false;
         }
         };
         //TODO step1: 合并參數
         for(k in option){
         init[k] = option[k];
         }
         //TODO step2: 參數轉換
         var params = '';
         for(k in init.data){
         params += '&'+k+'='+init.data[k];
         }
         var xhr = new XMLHttpRequest();
         // type url
         //TODO step3: 區分get和post,進行傳參
         var url = init.url+'?__='+new Date().getTime();
         //TODO step4: 發送前
         var flag = init.beforeSend();
         if(!flag){
         return;
         }
         if(init.type.toLowerCase() == 'get'){
         url += params;
         xhr.open(init.type,url,init.async);
         xhr.send();
         }else{
         xhr.open(init.type,url,init.async);
         xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
         xhr.send(params.substr(1));
         }
         xhr.onreadystatechange = function () {
         if(xhr.readyState == 4){
         if(xhr.status == 200){
         init.success(xhr.responseText);
         }else{
         //error
         init.error();
         }
         }
         }
        }

        這里我們要注意的是get和post的傳參方式位置不一樣,get請求需要直接拼接在url地址后邊,post請求需要在send方法里面傳參,而且需要這是請求頭setRequestHeader('content-type','application/x-www-form-urlencoded'),所以封裝時要進行區分。

        由于參數過多,用戶不需要每次都傳入很多參數,否則用起來會非常繁瑣。所以我們采取默認參數的形式,用戶不傳入就是用默認值,傳入就是用用戶的參數。

        三、使用示例

        ajax({
         url: 'test.json',
         data:{test:123,age:456},
         //type:'post',
         success: function (res) {
         console.log(res);
         }
        });

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

        文檔

        原生JS封裝AJAX方法

        原生JS封裝AJAX方法:Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下面我們看一下它的內部原理,并手動封裝一個自己的Ajax庫。一、原理原生Ajax的發送需要四步:1) 創建Ajax對象: XMLHttpRequest2) 設置請求參數: open(請求參數[get/post],ur
        推薦度:
        標簽: 方法 js 封裝
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲五月综合缴情婷婷| 久久精品国产亚洲AV大全| 爱情岛论坛亚洲品质自拍视频网站| 精品熟女少妇a∨免费久久| 亚洲国产成人久久综合碰碰动漫3d | 免费人妻无码不卡中文字幕18禁| 久久亚洲中文字幕无码| 国产不卡免费视频| 日本视频免费观看| 国产成人精品日本亚洲专区61| 一级中文字幕免费乱码专区| 国产亚洲美女精品久久久2020| 一本一道dvd在线观看免费视频 | 亚洲ts人妖网站| 好先生在线观看免费播放 | 成人网站免费大全日韩国产| 亚洲区小说区图片区QVOD| 精品视频在线免费观看| 久久久久亚洲精品日久生情 | 久久亚洲AV成人无码国产电影 | 亚洲 日韩 色 图网站| 国产免费观看青青草原网站| 亚州**色毛片免费观看| 亚洲av无码一区二区乱子伦as| 久久国产乱子免费精品| 亚洲色丰满少妇高潮18p| 免费国产在线观看老王影院| 四虎国产精品免费永久在线| 亚洲日韩中文字幕天堂不卡| 国产女高清在线看免费观看 | 99999久久久久久亚洲| 国产亚洲精品免费| 最新国产乱人伦偷精品免费网站 | 亚洲JLZZJLZZ少妇| 亚洲成色WWW久久网站| 日本亚洲免费无线码| 国产高潮久久免费观看| 亚洲成a人片在线网站| 亚洲一级Av无码毛片久久精品| 免费无码又爽又刺激高潮视频| 亚洲中文字幕无码中文字|