首先我们先了解ajax的get和post请求分别是怎样请求数据的

get请求

         let ajx = new XMLHttpRequest() //创建ajax实例
/*打开需要请求的地址,可以有三个参数
参1:请求方式
参2:请求地址
参3:是否异步,可选,默认异步
*/
ajx.open('get','http://localhost/day02/api/gouwu.php?name=zhangsan')
ajx.send()//向后端发送的数据,get方式用不到
ajx.onreadystatechange = ()=>{//监听状态
if(ajx.readyState==4){//判断就绪码,4为成功
if(ajx.status==200){//判断状态码,200表示成功
console.log(ajx.responseText) //打印请求的内容
}
}
}

post请求

        let ajx = new XMLHttpRequest() //创建ajax实例
// /*打开需要请求的地址,可以有三个参数
// 参1:请求方式
// 参2:请求地址
// 参3:是否异步,可选,默认异步
// */
ajx.open('post','http://localhost/day02/api/gouwu.php')
ajx.setRequestHeader('content-type','application/x-www-form-urlencoded')//设置请求头
ajx.send('name=zhangsan')//向后端发送的数据,get方式用不到
ajx.onreadystatechange = ()=>{//监听状态
if(ajx.readyState==4){//判断就绪码,4为成功
if(ajx.status==200){//判断状态码,200表示成功
console.log(ajx.responseText) //打印请求的内容
}
}
}

很麻烦吧,请求个数据我们需要写这么多,那么我们把它封装成get、post请求都可以使用的方法

首先先想好我们需要调用的方式,这里我封装的调用方式是这样的

ajax({ //调用封装的方法
type: 'get', //可以不写,默认get
url: 'http://localhost/day02/api/gouwu.php', //请求地址
data: { //需要传输的数据,可选
name: 'zhangsan',
age: 18
}
},a=>{//处理的到的数据
console.log(a)
})

然后根据上面的调用方法进行封装

function ajax(obj, fn) {
let ajx = new XMLHttpRequest() //创建ajax实例
obj.type = obj.type ? obj.type : 'get' //判断type存不存在,不存在默认等于get
let data = null //向后端发送的数据
if (obj.data) { //判断是否存在
for (let i in obj.data) {
data += i + '=' + obj.data[i] + '&' //键值拼接成name=zhagnsan&age=18形式
}
}
if (obj.type == 'get') { //处理get请求发送数据
ajx.open(obj.type, obj.url + '?' + data) //地址上拼接数据
ajx.send()
} else if (obj.type == 'post') { //处理post请求发送数据
ajx.open(obj.type, obj.url)
ajx.setRequestHeader('content-type', 'application/x-www-form-urlencoded') //设置请求头
ajx.send(data) //发送数据
}
ajx.onreadystatechange = () => {
if (ajx.readyState == 4) {
if (ajx.status == 200) {
/*
将得到的数据传给回调函数
短路写法,如果不传fn为空不会执行,有值就执行
*/
fn&&fn(ajx.responseText)
}
}
}
}

这样我们就封装好了,以后使用也就变得方便了

最新文章

  1. MyEclipse部署web项目到Tomcat出现An internal error occurred during: "Launching on Tomcat 7.x"的问题
  2. x01.Weiqi.12: 定式布局
  3. 转《UNIX编程艺术》读书心得
  4. ORM实现原理
  5. Linux学习之一——开机必备知识
  6. dom 按着shift多选
  7. 【redis】03list类型
  8. PL SQL Developer 使用总结
  9. MFC中状态栏显示鼠标坐标位置
  10. Android动画Animation之Tween用代码实现动画
  11. C#设计模式(23种设计模式)
  12. 文件比较,文件夹比较-- vimdiff,beyond compare, compare suite, WinMerge,Kdiff3
  13. [css]《css揭秘》学习(四)-一个元素实现内圆角边框
  14. 自学Zabbix3.10.1.4-事件通知Notifications upon events-媒介类型Ez Texting
  15. 【代码笔记】Web-CSS-CSS Table(表格)
  16. aop (权限控制之功能权限)
  17. docker+gitlab+gitlab-runner部署
  18. Spark 论文篇-RDD:一种为内存化集群计算设计的容错抽象(中英双语)
  19. OpenGL——旋转的六边形(动画)
  20. 《算法》第四章部分程序 part 12

热门文章

  1. [linux] VNC the connection was refused by the computer
  2. ReactNative报错:Can't find variable: __fbBatchedBridge
  3. 1、Fiddler基础
  4. kafka如何防止key相同的消息并发消费
  5. ie ajax 跨域情况遇到的各种问题
  6. 如何安放你的大文件,MongoDB GridFS可以帮助你
  7. Alink漫谈(四) : 模型的来龙去脉
  8. PAT-1079 Total Sales of Supply Chain (树的遍历)
  9. Spring Boot 教程(1) - HelloWorld
  10. vue实现对文章列表的点赞