//封装promise和ajax方法,进行接口的请求
/*
URL 请求的网址
type 请求类型 GET or POST
async 是否异步 true or false
data 参数
*/
function callApi(url,type,async,data){
return new Promise((resolve,reject) =>{
let xhr = null;
let params = data ? formsParams(data) : "";
url = params!=="" ? url + "?"+ params :url
//创建对象
if(window.XMLHttpRequest){
xhr = new XMLHttpRequest()
}else{
//ie浏览器
// xhr = new ActiveXObject("Microsoft.XMLHTTP")
}
if(type === "GET"){
xhr.open(type,url,async);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
resolve(xhr.responseText,this)
}else{
let resJson = {code:this.status,response:this.response}
reject(resJson,this)
}
}
}
xhr.send()
}else if(type === "POST"){
xhr.open(type,url,async);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.send(params);
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if (this.status === 200) {
resolve(JSON.parse(this.responseText), this)
} else {
var resJson = { code: this.status, response: this.response }
reject(resJson, this)
}
}
}
xhr.send(JSON.stringify(data))
}
//拼接URL与参数
function formsParams(data){
let arr = [];
for(let prop in data){
arr.push(prop + "=" +data[prop]);
}
return arr.join("&")
}
})
}
使用例子
return callApi("/apis/api/doc/mobile/news/gethome","GET",true,params)
.catch(error=>{
)
.then(result=>{
)