摘要:相比前一版本除了使用与法外还有以下改动现在不需要按顺序输入参数会针对和做不同的数据处理可以自定义设置请求头增加了参数数据类型的判断调用代码示例调用效果图核心代码没有多少变化,因为只有这一种使用方法不支持低版本浏览器错误判断为必填项请求地址不
相比前一版本除了使用 ES6 与法外还有以下改动
现在不需要按顺序输入参数
会针对 GET 和 POST 做不同的数据处理
可以自定义设置请求头
增加了参数数据类型的判断
调用代码示例
ajax({ url:"1.json", method:"post", resType:"json", headers:{ id:465, name:123, key:798 }, data:{ name: "yhtx", id: "1997" }, success(res){ console.log(res); }, error(){ console.log("error") } })
调用效果图
核心代码没有多少变化,因为只有这一种使用方法
//不支持低版本浏览器 const ajax = ({url,method="GET",data={}, async = true ,success,error,resType="",headers={}})=>{ //错误判断 url为必填项 if(!url || url === ""){ throw new Error("请求地址不能为空"); } //变量声明 let dataArr = []; let dataStr = ""; let xhr = new XMLHttpRequest();//不兼容低版本浏览器 let formData = new FormData(); //将小写转换成大写 method = method.toUpperCase(); //初始化data switch (method){ case "POST": for(let key in data){ formData.append(`${key}`,`${headers[key]}`);//将data转换成 FormData 对象的字段 } break; case "GET": for(let key in data){ dataArr.push(`${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`); } strData=dataArr.join("&"); break; } //设置返回数据格式 if(typeof async === "boolean" && async){//如果设置了同步就不能设置返回数据格式 if(typeof resType === "string"){ xhr.responseType = resType; // 在不设置responseType的时候默认为 text }else{ throw new Error("设置返回数据格式时,请使用字符串类型"); } } //发起请求 switch (method){ case "POST": xhr.open(method , url , async); break; case "GET": xhr.open(method , `${url}?${strData}` , async); break; } //设置请求头 必须在 xhr.open() 后才可以 //判断是否设置 if(typeof headers === "object" && Object.keys(headers).length !== 0){ //循环 headers 设置请求头 for(let key in headers){ xhr.setRequestHeader(`${key}`,`${headers[key]}`); // xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); } //console.log(Object.keys(headers));//返回一个数组,数组成员是对象中所有的键 //console.log(Object.values(headers));//返回一个数组,数组成员是对象中所有的值 } xhr.send(formData);//发送数据 //监听状态 xhr.onreadystatechange = ()=>{ if(xhr.readyState === 4){ let res = xhr.response; if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){ typeof success === "function" && success(res); }else{ typeof error === "function" && error(res); } } } } ajax({ url:"1.json", method:"post", resType:"json", headers:{ id:465, name:123, key:798 }, data:{ name: "yhtx", id: "1997" }, success(res){ console.log(res); }, error(){ console.log("error") } })
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/100449.html
关于 AJAX 相信都用过,自己动手封装的也肯定有不少,但应该都只是简单的可以请求,不能设置同步异步以及返回的数据格式 兼容低版本 IE5、IE6 可以使用 get 和 post 请求数据 可以设置请求头 需要的思路以及语法都有了,需要小伙伴自己拓展哦 可以设置返回数据格式,不设置为默认 get 请求的数据拼接我没写,有需要的可以自己加 之后会有 ES6 语法的封装敬请期待 注:代码使用 ES5...
摘要:从最开始的到封装后的都在试图解决异步编程过程中的问题。为了让编程更美好,我们就需要引入来降低异步编程的复杂性。写一个符合规范并可配合使用的写一个符合规范并可配合使用的理解的工作原理采用回调函数来处理异步编程。 JavaScript怎么使用循环代替(异步)递归 问题描述 在开发过程中,遇到一个需求:在系统初始化时通过http获取一个第三方服务器端的列表,第三方服务器提供了一个接口,可通过...
摘要:一般来说,声明式编程关注于发生了啥,而命令式则同时关注与咋发生的。声明式编程可以较好地解决这个问题,刚才提到的比较麻烦的元素选择这个动作可以交托给框架或者库区处理,这样就能让开发者专注于发生了啥,这里推荐一波与。 本文翻译自FreeCodeCamp的from-zero-to-front-end-hero-part。 继续译者的废话,这篇文章是前端攻略-从路人甲到英雄无敌的下半部分,在...
摘要:相关最大的特性就在于直接操纵网页上的节点,从而实现网页的局部刷新而非全局刷新。该回调函数会在送回响应的时候被调用。当然了,如果浏览器不支持对象,会返回,在这时需要进行额外的处理。 前言 马上就要参加一个团队项目进行React的前端开发了。最近正在着手熟练React语法,然后发现本质上还是建立在对javascript的深刻理解上。市面上在js基础上封装出了非常多优秀的车轮,其中最被新手广...
阅读 2823·2021-09-22 15:43
阅读 4527·2021-09-06 15:02
阅读 813·2019-08-29 13:55
阅读 1651·2019-08-29 12:58
阅读 3020·2019-08-29 12:38
阅读 1175·2019-08-26 12:20
阅读 2232·2019-08-26 12:12
阅读 3254·2019-08-23 18:35