“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)
etch是一种HTTP数据请求的方式,是XMLHttpRequest的一种替代方案。fetch不是ajax的进一步封装,而是原生js。Fetch函数就是原生js,没有使用XMLHttpRequest对象。
ajax
- 使用步骤
1.创建XmlHttpRequest对象
2.调用open方法设置基本请求信息
3.设置发送的数据,发送请求
4.注册监听的回调函数
5.拿到返回值,对页面进行更新 //1.创建Ajax对象if(window.XMLHttpRequest){var oAjax=new XMLHttpRequest();}else{var oAjax=new ActiveXObject("Microsoft.XMLHTTP");}//2.连接服务器(打开和服务器的连接)oAjax.open('GET', url, true);//3.发送oAjax.send();//4.接收oAjax.onreadystatechange=function (){if(oAjax.readyState==4){if(oAjax.status==200){//alert('成功了:'+oAjax.responseText);fnSucc(oAjax.responseText);}else{//alert('失败了');if(fnFaild){fnFaild();}}}};
fetch
- 特点
1、第一个参数是URL:
2、第二个是可选参数,可以控制不同配置的 init 对象
3、使用了 JavaScript Promises 来处理结果/回调: fetch(url).then(response => response.json()).then(data => console.log(data)).catch(e => console.log("Oops, error", e))
- 更酷的一点
你可以通过Request构造器函数创建一个新的请求对象,你还可以基于原有的对象创建一个新的对象。 新的请求和旧的并没有什么不同,但你可以通过稍微调整配置对象,将其用于不同的场景。例如:
上面的代码中我们指明了请求使用的方法为GET,并且指定不缓存响应的结果,你可以基于原有的GET请求创建一个POST请求,它们具有相同的请求源。代码如下:
fetch封装
export default async(url = '', data = {}, type = 'GET', method = 'fetch') => {type = type.toUpperCase();url = baseUrl + url;if (type == 'GET') {let dataStr = ''; //数据拼接字符串Object.keys(data).forEach(key => {dataStr += key + '=' + data[key] + '&';})if (dataStr !== '') {dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));url = url + '?' + dataStr;}}if (window.fetch && method == 'fetch') {let requestConfig = {credentials: 'include',//为了在当前域名内自动发送 cookie , 必须提供这个选项method: type,headers: {'Accept': 'application/json','Content-Type': 'application/json'},mode: "cors",//请求的模式cache: "force-cache"}if (type == 'POST') {Object.defineProperty(requestConfig, 'body', {value: JSON.stringify(data)})}try {const response = await fetch(url, requestConfig);const responseJson = await response.json();return responseJson} catch (error) {throw new Error(error)}} else {return new Promise((resolve, reject) => {let requestObj;if (window.XMLHttpRequest) {requestObj = new XMLHttpRequest();} else {requestObj = new ActiveXObject;}let sendData = '';if (type == 'POST') {sendData = JSON.stringify(data);}requestObj.open(type, url, true);requestObj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");requestObj.send(sendData);requestObj.onreadystatechange = () => {if (requestObj.readyState == 4) {if (requestObj.status == 200) {let obj = requestObj.responseif (typeof obj !== 'object') {obj = JSON.parse(obj);}resolve(obj)} else {reject(requestObj)}}}})}
}
本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。
欢迎一起私信交流。
“睡服“面试官系列之各系列目录汇总(建议学习收藏)
“约见”面试官系列之常见面试题之第七十八篇之fetch(建议收藏)相关推荐
- “约见”面试官系列之常见面试题之第七十九篇之ES5和ES6(建议收藏)
什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...
- “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)
vue-router中的路由钩子函数基本用法 路由钩子函数分为三种类型如下: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { consol ...
- “约见”面试官系列之常见面试题之第七十五篇之vue中如何使当前css起作用(建议收藏)
方法很简单,在组件中的style前面加上scoped就可以了,示例: 本面试题为前端常考面试题,后续有机会继续完善.我是歌谣,一个沉迷于故事的讲述者. 欢迎一起私信交流. "睡服" ...
- “约见”面试官系列之常见面试题之第七十四篇之v-if和v-for优先级(建议收藏)
永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users" ...
- “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)
简介 ArrayList 是 java 集合框架中比较常用的数据结构了.继承自 AbstractList,实现了 List 接口.底层基于数组实现容量大小动态变化.允许 null 的存在.同时还实现了 ...
- “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)
首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...
- “约见”面试官系列之常见面试题之第五十八篇之join和split(建议收藏)
join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. <script>var a=new Array();a[0]="XHTML" ...
- “约见”面试官系列之常见面试题之第四十八篇之各个浏览器内核(建议收藏)
一.简单,明了,概括的介绍一下: 主流浏览器 浏览器内核 IE ...
- “约见”面试官系列之常见面试题之第七十篇之==和===(建议收藏)
==和===的区别== 在比较时等号左右两侧数据类型不同时会先转成相同数据类型,再比较== 是相对比较: === 是绝对比较1.1 字符串 == 数字 :字符串转换成数字console.log(1 = ...
最新文章
- 高岭土吸附阳离子_工业中高岭土、高岭石中的应用特点!
- mybatis plus 使用函数_这些Mybatis-Plus使用技巧,太火了
- 学生党专用计算机,开学在即何必纠结?学生党专用显卡推荐
- osg渲染到纹理技术(一)
- 小米8ios图标包下载_小米互传PC端抢先下载,免流量、高速互传,支持多设备共享...
- linux之sed使用技巧
- 黑马程序员--java基础加强之内省(IntroSpector)
- 委托、事件--委托介绍篇
- 3分钟全面了解元数据和数据元
- 程序猿学习中华古诗词路径
- 企业网络管理利器-SpiceWorks(1)
- ADA本月上涨100%,背后或有三个原因
- Vue-生命周期(函数)
- 智能家居的应用研究现状
- 纤巧精干:爱普生六轴机器人
- 韩国顶级舞台剧《爱上街舞少年的芭蕾少女》掀起街舞狂潮
- 基于微信小程序的签到系统设计与实现-计算机毕业设计源码+LW文档
- 【计组期末复习一】第八章:CPU的结构和功能 :指令中各有哪些字段?变址寻址和基址寻址异同?如何设计计算机指令?如何求寻址范围?
- html钟表代码运行原理,·钟表指针运行方向的基本原理
- java dbcp c3p0_c3p0与dbcp的作用与区别,及使用!
热门文章
- flask-whooshalchemy需要注意的一点
- 58-混沌感悟.(2015.2.11)
- DSOfile,修改windows系统文件摘要
- Struts2学习笔记1
- WebRTC音视频引擎研究(2)--VoiceEngine音频编解码器数据结构以及参数设置
- MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。...
- 2个字节能存多少个16进制_Java语言中最大的整数再加1等于多少?看完秒懂
- java h2 derby_嵌入式H2数据库的Spring配置以进行测试
- epoll哪些触发模式_5.epoll的水平触发和边缘触发
- 北京矿大计算机考研每年分数线,2021中国矿业大学北京考研国家线公布时间_国家线是多少分...