調用代碼示例ajax
ajax({ url:'1.json', method:'post', resType:'json', headers:{ id:465, name:123, key:798 }, data:{ name: "yhtx", id: "1997" }, success(res){ console.log(res); }, error(){ console.log('error') } })
調用效果圖json
核心代碼沒有多少變化,由於只有這一種使用方法數組
//不支持低版本瀏覽器 const ajax = ({url,method="GET",data={}, async = true ,success,error,resType="",headers={}})=>{ //錯誤判斷 url爲必填項 if(!url || url === ''){ throw new Error('請求地址不能爲空'); } //變量聲明 let dataArr = []; let dataStr = ""; let xhr = new XMLHttpRequest();//不兼容低版本瀏覽器 let formData = new FormData(); //將小寫轉換成大寫 method = method.toUpperCase(); //初始化data switch (method){ case 'POST': for(let key in data){ formData.append(`${key}`,`${headers[key]}`);//將data轉換成 FormData 對象的字段 } break; case 'GET': for(let key in data){ dataArr.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`); } strData=dataArr.join('&'); break; } //設置返回數據格式 if(typeof async === 'boolean' && async){//若是設置了同步就不能設置返回數據格式 if(typeof resType === 'string'){ xhr.responseType = resType; // 在不設置responseType的時候默認爲 text }else{ throw new Error('設置返回數據格式時,請使用字符串類型'); } } //發起請求 switch (method){ case 'POST': xhr.open(method , url , async); break; case 'GET': xhr.open(method , `${url}?${strData}` , async); break; } //設置請求頭 必須在 xhr.open() 後才能夠 //判斷是否設置 if(typeof headers === 'object' && Object.keys(headers).length !== 0){ //循環 headers 設置請求頭 for(let key in headers){ xhr.setRequestHeader(`${key}`,`${headers[key]}`); // xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); } //console.log(Object.keys(headers));//返回一個數組,數組成員是對象中全部的鍵 //console.log(Object.values(headers));//返回一個數組,數組成員是對象中全部的值 } xhr.send(formData);//發送數據 //監聽狀態 xhr.onreadystatechange = ()=>{ if(xhr.readyState === 4){ let res = xhr.response; if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){ typeof success === 'function' && success(res); }else{ typeof error === 'function' && error(res); } } } } ajax({ url:'1.json', method:'post', resType:'json', headers:{ id:465, name:123, key:798 }, data:{ name: "yhtx", id: "1997" }, success(res){ console.log(res); }, error(){ console.log('error') } })