前端ajax是什么意思(Ajax 前后端数据交互)
ajax 数据交互
今天又是奋斗的一天 ,行吧 ,来学习ajax
什么是ajax? ajax全称 async javascript and xml 具有前后端交互的能力 ,如果我们使用form表单向后端去提交数据 ,我们的页面在提交的时候将会刷新 ajax是客户端向服务端发送信息的工具 ,以及接受响应的工具! ajax是一个 默认异步 执行机制的功能 ajax的优势
我总结起来归根于以下几点:
原生js就可以使用 ,不需要插件的支持 用户体验好 ,页面不需要刷新就可以更新数据 减少服务端和带宽的负担 ajax的使用 创建一个ajax对象 new XMLHttpRequest() 配置这个对象–open 发送请求—send 接受相应 onload或者onreadystatechange事件监听具体步骤看下面代码
创建一个ajax对象 let xhr=new XMLHttpRequest() 配置这个对象xhr.open(请求方式 ,请求地址 ,同步还是异步)
xhr.open(get, https://www.baidu.com) //第三个参数默认是异步 发送请求 xhr.send() 接受返回过来的数据要想接收到响应 ,必须遵从下面条件:
本次HTTP请求是成功的 ,也就是我们之前所说的http状态吗为200~299 ajax对象也有自己的状态吗 ,用来表示本次ajax请求中各个阶段 xhr.onload = () => { console.log(xhr.responseText); } //或者 xhr.onreadystatechange = () => { if (xhr.readyState === 4) { console.log(xhr.responseText); } } ajax状态码ajax状态码—xhr.readyState
是用来表示一个ajax请求的全部过程中的某一个状态
readyState===0:表示初始化完成,也就是open方法还没执行 readyState===1:表示配置已经完成 ,也就是执行完open之后 readyState===2:表示send方法已经执行完毕 readyState===3:表示正在解析响应内容(只有一部分解析了) readyState===4: 表示响应内容已经解析完成 ,可以在客户端使用了当readyState===4的时候,我们就可以正常使用服务端的数据了 。再配合http状态码为200~299
ajax对象中有一个是xhr.status ,这个是用来记录请求的http状态码的
当两个条件都满足的时候 ,我们的请求就完成了!
readystatechange 在ajax对象中有一个事件 ,叫readystatechange 这个事件是专门来监听ajax对象的readystate的值的 只要值发生变化 ,就会触发这个事件 所以我们可以采用这个事件来监听readystate中的值 const xhr = new XMLHttpRequest() xhr.open(get, ./data.php) xhr.send() xhr.onreadyStateChange = function () { // 每次 readyState 改变的时候都会触发该事件 // 我们就在这里判断 readyState 的值是不是到 4 // 并且 http 的状态码是不是 200 ~ 299 if (xhr.readyState === 4 && /^2\d{2}$/.test(xhr.status)) { // 这里表示验证通过 // 我们就可以获取服务端给我们响应的内容了 } responseText记录服务端给我们的响应体内容的
ajax请求方式
再进入下面这个话题之前 ,我们先全局安装一个json-server ,来利用json文件模拟后端阶段接口
npm i json-server -g
ajax请求方式有很多种 ,下面我总结了比较常用的五种
get —偏向于获取数据
post—偏向于提交数据
put —偏向于更新数据(整个覆盖)
patch —偏向于部分修改数据
delete —偏向于删除数据
以上五种 ,但工作中比较常用的是get和post
封装一个属于自己的ajax
我这里就简单封装 ,利用类似于这样的思路 ,封装完成,使用这个封装的ajax ,请阅读一下下面这个手册--这个是配合json-server虚拟后端接口使用的
function changeObj(obj) { let arr = [] for (i in obj) { arr.push(obj[i]) } return arr } function shuAjax(options) { let obj1 = { url: , method: GET, async: true, data: {}, headers: { "Content-Type": "application/form-www-urlencoded", "Content-Type": "application/json" }, success: function (res) { console.log(res); }, error: function (err) { console.log(err); } } let { url, method, async, data, headers, success, error } = { ...obj1, ...options } switch (method.toUpperCase()) { case delete: } //首先设置基本的XML let xhr = new XMLHttpRequest() xhr.open(method, url, async) //设置请求头 let newArr = changeObj(headers) for (let i = 0; i < newArr.length; i++) { xhr.setRequestHeader("Content-Type", newArr[i]) } //作个判断 ,如果不是get和delete的话就要传值 if (method.toUpperCase() === get || method.toUpperCase === delete) { xhr.send() } else { xhr.send(JSON.stringify(data)) } xhr.onload = () => { console.log(xhr.responseText); } }shuAjax使用方法:
格式:shuAjax({})
对象中的参数:
url 必须传的参数 --如果是要使用put PATCH delete需要在路由最后面加上所要访问的id值
method 可选 不选为get
data 可选 当用post PATCH put的时候传入一个对象形式的参数
使用示例
<button id="btn1">get</button> <script src="./shuAjax.js"></script> <script> btn1.onclick = () => { shuAjax({ url: http://localhost:3000/users/22, method: PUT, data: { username: kang, password: 1234556565 } }) }创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!