現在web從伺服器請求數據,很多用到Ajax,不過都是用的JQuery封裝好的,之前做項目,由於無法引用JQuery,所以就只能用原生了,話不多說,請看代碼。 自己封裝Ajax,主要分三步: 第一步:創建需要的對象,這裡主要用到的是XMLHttpRequest,註意需要考慮早期的IE; 第二步:連接 ...
現在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)函數。