九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Ajax原理與封裝
                                                    Ajax大家每天都在用,jquery庫對Ajax的封裝也很完善、很好用,下面我們看一下他的內(nèi)部原理,并手動封裝一個自己的Ajax庫。

更多有關(guān)ajax封裝及數(shù)據(jù)處理,請參看上海尚學(xué)堂《Ajax中replace+Jq封裝的ajax》、《ajax+json數(shù)據(jù)處理

一、原理

原生Ajax的發(fā)送需要四步:
1) 創(chuàng)建Ajax對象: XMLHttpRequest
2) 設(shè)置請求參數(shù): open(請求參數(shù)[get/post],url地址, 是否異步[true/false] )
3) 設(shè)置回調(diào)函數(shù): onreadystateChange 用于處理返回的數(shù)據(jù)
4) 發(fā)送請求: send()


  1. //TODO step1: 創(chuàng)建ajax對象  
  2. var xhr = new XMLHttpRequest();  
  3. //TODO step2: 設(shè)置請求參數(shù)  
  4. xhr.open('get','01.php',true);  
  5. //TODO step3: 設(shè)置回調(diào)  
  6. xhr.onreadystatechange = function () {  
  7.     //接收返回數(shù)據(jù)  
  8.     console.log(xhr.responseText);//responseText 用于接收后臺響應(yīng)的文本  
  9. }  
  10. //TODO step4: 發(fā)送請求  
  11. xhr.send();  


二、封裝

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

  • url  請求地址

  • data 請求數(shù)據(jù)

  • type 請求類型

  • success 成功回調(diào)

  • error 失敗回調(diào)

  • beforeSend 發(fā)送前調(diào)用 return false 阻止發(fā)送

  • complete ajax請求成功的回調(diào)無論什么時候都會執(zhí)行


  1. function ajax(option){  
  2.     //用戶配置option 默認配置init  
  3.     var init = {  
  4.         type:'get',  
  5.         async:true,  
  6.         url:'',  
  7.         success: function () { },  
  8.         error: function () { },  
  9.         data:{},  
  10.         beforeSend: function () {  
  11.             console.log('發(fā)送前...');  
  12.             return false;  
  13.         }  
  14.     };  
  15.     //TODO step1: 合并參數(shù)  
  16.     for(k in option){  
  17.         init[k] = option[k];  
  18.     }  
  19.     //TODO step2: 參數(shù)轉(zhuǎn)換  
  20.     var params = '';  
  21.     for(k in init.data){  
  22.         params += '&'+k+'='+init.data[k];  
  23.     }  
  24.     var xhr = new XMLHttpRequest();  
  25.     // type url  
  26.     //TODO step3: 區(qū)分get和post,進行傳參  
  27.     var url = init.url+'?__='+new Date().getTime();  
  28.     //TODO step4: 發(fā)送前  
  29.     var flag = init.beforeSend();  
  30.     if(!flag){  
  31.         return;  
  32.     }  
  33.     if(init.type.toLowerCase() == 'get'){  
  34.         url += params;  
  35.         xhr.open(init.type,url,init.async);  
  36.         xhr.send();  
  37.     }else{  
  38.         xhr.open(init.type,url,init.async);  
  39.       xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');  
  40.         xhr.send(params.substr(1));  
  41.     }  
  42.     xhr.onreadystatechange = function () {  
  43.         if(xhr.readyState == 4){  
  44.             if(xhr.status == 200){  
  45.                 init.success(xhr.responseText);  
  46.             }else{  
  47.                 //error  
  48.                 init.error();  
  49.             }  
  50.         }  
  51.     }  
  52. }  

這里我們要注意的是getpost的傳參方式位置不一樣,get請求需要直接拼接在url地址后邊,post請求需要在send方法里面?zhèn)鲄?,而且需要這是請求頭setRequestHeader('content-type','application/x-www-

form-urlencoded'),所以封裝時要進行區(qū)分。

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

三、使用示例

  1. ajax({  
  2.     url: 'test.json',  
  3.     data:{test:123,age:456},  
  4.     //type:'post',  
  5.     success: function (res) {  
  6.         console.log(res);  
  7.     }  
  8. });  





本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
jquery.ajax
JQuery筆記(下)
$.ajax,axios,fetch三種ajax請求的區(qū)別
Ajax 操作
原生js對Ajax封裝
Ajax總結(jié)篇
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服