現在web從伺服器請求資料,很多用到Ajax,不過都是用的JQuery封裝好的,之前做專案,由於無法引用JQuery,所以就只能用原生了,話不多說,請看程式碼。
1 /*-------------------Ajax start--------------------*/ 2 3 function ajax(options) { 4 options = options || {}; 5 options.type = (options.type || "GET").toUpperCase(); 6 options.dataType = options.dataType || "json"; 7 var params = formatParams(options.data); 8 var xhr; 9 10 //建立 - 第一步 11 if (window.XMLHttpRequest) { 12 xhr = new XMLHttpRequest(); 13 } else if(window.ActiveObject) { //IE6及以下 14 xhr = new ActiveXObject(`Microsoft.XMLHTTP`); 15 } 16 17 //連線 和 傳送 - 第二步 18 if (options.type == "GET") { 19 xhr.open("GET", options.url + "?" + params, true); 20 xhr.send(null); 21 } else if (options.type == "POST") { 22 xhr.open("POST", options.url, true); 23 //設定表單提交時的內容型別 24 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 25 xhr.send(params); 26 } 27 28 //接收 - 第三步 29 xhr.onreadystatechange = function () { 30 if (xhr.readyState == 4) { 31 var status = xhr.status; 32 if (status >= 200 && status < 300 || status == 304) { 33 options.success && options.success(xhr.responseText, xhr.responseXML); 34 } else { 35 options.error && options.error(status); 36 } 37 } 38 } 39 } 40 41 //格式化引數 42 function formatParams(data){ 43 var arr = []; 44 for (var name in data) { 45 arr.push(encodeURIComponent(name) + "=" + encodeURIComponent(data[name])); 46 } 47 arr.push(("v=" + Math.random()).replace(".","")); 48 return arr.join("&"); 49 } 50 51 /*-------------------Ajax end-------------------*/
自己封裝Ajax,主要分三步:
第一步:建立需要的物件,這裡主要用到的是XMLHttpRequest,注意需要考慮早期的IE;
第二步:連線和傳送;
第三步:接收;
這裡為了格式化請求引數,封裝了一個formatParams(data)函式。