封装自己的Ajax函数
举例:定义myAjax()函数,他接收一个配置对象作为参数,在配置对象中可以设置一下的属性
method:请求的类型
URL:请求的URL地址
data:请求携带的数据
success:请求成功之后返回的函数
data对象:我们需要把data函数中的对象 转化为字符串对象,从而提交给服务器 因此我们要resloveData函数:
resloveData()思路先定义一个数组 ;然后循环数组data中的元素,并将元素通过push方法将键值对压进我们新定义的数组中;循环结束后将元素用户&连接
代码如下:
function resolveData(data){
var arr=[];
for(let k in data){
var str=k+'='+data[k];
arr.push(str);
}
return arr.join("&")
}
var test =resolveData({name:'张三',age:18})
console.log(test);
定义完拼接字符串后,在myAjax函数中先创建一个xhr函数,然后调用resolveData()函数并指定一个变量来接收拼接好的字符串,最后给xhr添加监听事件然后获取附属器上的数据
function myAjax(optins){
var xhr=new XMLHttpRequest();
var s=resolveData(optins.data)
xhr.onreadystatechange=function(){
if(xhr.readyState==4&&xhr.status==200){
var res=JSON.parse(xhr.responseText)
options.success(result)
}
}
}
判断请求的类型
不同的请求类型,对应的xhr对象的不同操作,因此要对不同的请求类型进行if …else的操作【对方法是post还是get进行判断对应不同的操作 】
if(options.method.toUpperCase ()=='GET'){
// 发起get请求
xhr.open('GET','optioms.URL?s')
xhr.send()
}
else if (options.method.toUpperCase()=='POST'){
// 发起post请求
xhr.send("POST",'options.URL')
xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded')
xhr.send(s)
}