const axios = function(options){ let promise = new promise(( resolve , reject )=>{ var xhr = null; if(window.XMLHttpRequest){//兼容處理 xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } var data = ""; for (var key in options.data) {//數據處理 data += "&" + key + "=" + options.data[key] } if (options.method == "get") { let url = options.url + "?" + data.slice(1); xhr.open(options.method, url); xhr.send(); } else if (options.method == "post") { xhr.open(options.method, options.url); xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded"); xhr.send(data); } xhr.onreadystatechange = function () { let timer = null; let timeout = options.timeout?options.timeout:5000 //等待響應的時間 if(xhr.readyState == 4 && xhr.status == 200){ let res = JSON.parse(xhr.responseText); clearTimeout(timer); resolve(res); } timer = setTimeout(()=>{ clearTimeout(timer); reject(xhr.status); },timeout) } }) return promise; }
栗子:
axios({ method:"get", url:"./data.json", data:{ id:10 } }).then((res)=>{ console.log(res) },(e)=>{ console.log(e); })