自己封裝一個簡單的ajax插件


 48  function myAjax(obj) {
 49      var xmlHttp;                         //保存xmlHttpRequest對象
 50      var type = obj.requestType;          //保存請求方式
 51      var cache = obj.cache || false;      //get時是否使用緩存,默認否
 52      var success = obj.success;           //數據請求成功的回調方法
 53      var error = obj.error;               //發生錯誤的回調方法
 54      var async = obj.async || false;      //是否異步,默認否
 55      var data = [];                       //存儲用戶發來的數據
 56      var url = obj.url;                   //用戶請求地址
 57 
 58 
 59      createXmlHttp();   //執行xmlHttp創建函數
 60 
 61      //創建xmlHttp失敗
 62      if(!xmlHttp) {
 63         console.log("我的老哥,創建xmlHttp對象失敗啦!您的瀏覽器不支持xmlHttpRequest對象");
 64      }
 65 
 66      try {
 67          //定義狀態監聽函數
 68          xmlHttp.onreadystatechange = function () {
 69              switch (xmlHttp.readyState) {
 70                  case 1:
 71                      console.log("open() 方法已調用,但是 send() 方法未調用。請求還沒有被發送。");
 72                      break;
 73                  case 2:
 74                      console.log("Send() 方法已調用,HTTP 請求已發送到 Web 服務器。未接收到響應。");
 75                      break;
 76                  case 3:
 77                      console.log("所有響應頭部都已經接收到。響應體開始接收但未完成。");
 78                      break;
 79                  case 4:
 80                      if (xmlHttp.status == 200) {
 81                          console.log("HTTP 響應已經完全接收。");
 82                          success(xmlHttp.responseText);                              //調用回調函數
 83                      }
 84                      break;
 85                  default:
 86                      error(xmlHttp.statusText);
 87                      break;
 88              }
 89          };
 90 
 91          //把用戶傳來的數據轉換成字符串
 92          for (var i in obj.data) {
 93              data.push(i + '=' + obj.data[i]);
 94          }
 95          data = data.join('&');
 96 
 97          if (type.toUpperCase() == 'GET') {                //如果是get請求
 98              if (cache == false) {                         //如果get請求不使用緩存
 99                  xmlHttp.open('get', url + '?' + data + '&random=' + Math.random(), async);
100                  xmlHttp.send('null');
101              } else {                                     //如果get請求使用緩存
102                  xmlHttp.open('get', url + '?' + data, async);
103                  xmlHttp.send('null');
104              }
105          } else if (type.toUpperCase() == 'POST')          //如果是post請求
106          {
107              xmlHttp.open('post', url, async);
108              xmlHttp.setRequestHeader("Content-Type"
109                  , "application/x-www-form-urlencoded");
110              xmlHttp.send(data);
111          } else {
112             throw  new Error('您的請求方法有誤!');
113          }
114      } catch (error) {
115          console.log("出錯啦:" + error.message);
116      }
117 
118 
119     //創建xmlHttpRequest對象函數
120     function createXmlHttp() {
121         if(window.ActiveXObject) {
122             try {
123                 xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
124             } catch (e) {
125                 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
126             }
127 
128         } else if (window.XMLHttpRequest){
129             try {
130                 xmlHttp = new XMLHttpRequest();
131             } catch(e) {
132                 xmlHttp = false;
133             }
134         }
135     }
136 
137  }
插件基本邏輯:
GET請求: 1.新建XHR對象 2.定義狀態監聽函數,各種狀態對應各種處理 3.調用open方法啟動請求,准備發送 4.使用send方法發送請求,參數為null POST請求: 1.新建XHR對象 2.定義狀態監聽函數,各種狀態對應各種處理 3.使用open方法啟動請求,准備發送 4.設置http頭信息的Content-Type類型,模擬表單發送 5.使用send方法發送請求,參數為自己要發送的東西
插件使用方法:
1.在html頁面引入myAjax.js文件之后就可以使用啦
2.
get方法使用例子:

   myAjax({
 requestType: 'get',
url: '/getFunc',
async: true,
cache: false,
data: { name: "lin", age: "20"},
success: function (data) {
alert(data);
},
error: function (statusText) {
alert("請求失敗了,以下是具體信息:\n" + statusText);
}
});

post方法使用例子:
myAjax({
requestType: 'post',
url: '/postFunc',
async: true,
data: {name:"shuai", age: 10},
success: function (data) {
console.log(data);
},
error: function (statusText) {
alert("請求失敗了,以下是具體信息:\n" + statusText);
}
});

這個插件主要是我為了學習原生ajax和函數封裝而寫的,還存在很多bug,同樣在學習ajax和函數封裝的同學可以參考參考,取其精華棄其糟粕,嘻嘻嘻。  

 

myAjax.js已經在github開源,上面有實現具體例子: https://github.com/nayonglin/myAjax 記得star啊我的老哥!!!!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM