欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

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

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

一、原理

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


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


二、封裝

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

  • url  請求地址

  • data 請求數據

  • type 請求類(lèi)型

  • success 成功回調

  • error 失敗回調

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

  • complete ajax請求成功的回調無(wú)論什么時(shí)候都會(huì )執行


  1. function ajax(option){  
  2.     //用戶(hù)配置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: 合并參數  
  16.     for(k in option){  
  17.         init[k] = option[k];  
  18.     }  
  19.     //TODO step2: 參數轉換  
  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: 區分get和post,進(jìn)行傳參  
  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方法里面傳參,而且需要這是請求頭setRequestHeader('content-type','application/x-www-

form-urlencoded'),所以封裝時(shí)要進(jìn)行區分。

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

三、使用示例

  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ù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
jquery.ajax
JQuery筆記(下)
$.ajax,axios,fetch三種ajax請求的區別
Ajax 操作
原生js對Ajax封裝
Ajax總結篇
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久