ajax请求时所需要的参数:
url:请求地址
method:请求方式
async:是否异步
data:请求参数
dataType:返回的数据格式,string
success:成功的回调函数
error:失败的回调函数
function ajax(obj={}){
//创建默认参数
var defObj={
url:'',
method:'get',
async:true,
data:'',
dataType:'string',
success:()=>{},
error:()=>{},
}
//判断传入的参数中,是否传递了请求路径
if(obj.url== undefined){
throw new Error("缺少请求路径")
}
//使用传入的参数去替换默认参数
//遍历传入的参数
for(var key in obj){
//把当前遍历出来的键所对应的值,赋值给默认参数中同样的键
defObj[key]=obj[key]
}
//创建ajax对象
var xhr = new XMLHttpRequest()
//判断默认参数中是否有请求数据
if(defObj.data){
//判断请求方式是否为get
if(defObj.method.toLowerCase()=="get"){
//配置请求信息
xhr.open(defObj.method,defObj.url+"?"+defObj.data,defObj.async)
//发送请求
xhr.send()
}else{
//配置请求信息
xhr.open(defObj.method,defObj.url,defObj.async)
//设置请求头信息
xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
//发送请求
xhr.send(defObj.data)
}
}else{
//配置请求信息
xhr.open(defObj.method,defObj.url,defObj.async)
//发送请求
xhr.send()
}
//4、监听ajax状态的改变
xhr.onreadystatechange=function(){
//判断ajax状态是否结束
if(xhr.readyState==4){
//判断http请求是否成功
if(xhr.status==200){
//获取响应结果
var txt = xhr.responseText
//判断返回的数据格式是否为string
if(defObj.dataType=="string"){
//调用成功的回调函数
defObj.success(txt)
//当前函数中的txt,是实参
}else if(defObj.dataType == 'json'){
//调用成功的回调函数
defObj.success(eval('('+txt+')'))
}
}else{
//调用失败的回调函数
defObj.error(xhr.status)
}
}
}
}