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(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题之第七十九篇之ES5和ES6(建议收藏)

    什么是JavaScript JavaScript一种动态类型.弱类型.基于原型的客户端脚本语言,用来给HTML网页增加动态功能.(好吧,概念什么最讨厌了) 动态: 在运行时确定数据类型.变量使用之前不 ...

  2. “约见”面试官系列之常见面试题之第七十六篇之vue-router中的路由钩子函数基本用法 (建议收藏)

    vue-router中的路由钩子函数基本用法 路由钩子函数分为三种类型如下: 第一种:全局钩子函数. router.beforeEach((to, from, next) => { consol ...

  3. “约见”面试官系列之常见面试题之第七十五篇之vue中如何使当前css起作用(建议收藏)

    方法很简单,在组件中的style前面加上scoped就可以了,示例: 本面试题为前端常考面试题,后续有机会继续完善.我是歌谣,一个沉迷于故事的讲述者. 欢迎一起私信交流. "睡服" ...

  4. “约见”面试官系列之常见面试题之第七十四篇之v-if和v-for优先级(建议收藏)

    永远不要把 v-if 和 v-for 同时用在同一个元素上. 一般我们在两种常见的情况下会倾向于这样做: 为了过滤一个列表中的项目 (比如 v-for="user in users" ...

  5. “约见”面试官系列之常见面试题之第七十二篇之arrayList(建议收藏)

    简介 ArrayList 是 java 集合框架中比较常用的数据结构了.继承自 AbstractList,实现了 List 接口.底层基于数组实现容量大小动态变化.允许 null 的存在.同时还实现了 ...

  6. “约见”面试官系列之常见面试题之第六十八篇之本地对象 内置对象 宿主对象(建议收藏)

    首先解释下宿主环境:一般宿主环境由外壳程序创建与维护,只要能提供js引擎执行的环境都可称之为外壳程序.如:web浏览器,一些桌面应用系统等.即由web浏览器或是这些桌面应用系统早就的环境即宿主环境. ...

  7. “约见”面试官系列之常见面试题之第五十八篇之join和split(建议收藏)

    join() 方法用于把数组中的所有元素放入一个字符串.元素是通过指定的分隔符进行分隔的. <script>var a=new Array();a[0]="XHTML" ...

  8. “约见”面试官系列之常见面试题之第四十八篇之各个浏览器内核(建议收藏)

    一.简单,明了,概括的介绍一下: 主流浏览器                                          浏览器内核 IE                             ...

  9. “约见”面试官系列之常见面试题之第七十篇之==和===(建议收藏)

    ==和===的区别== 在比较时等号左右两侧数据类型不同时会先转成相同数据类型,再比较== 是相对比较: === 是绝对比较1.1 字符串 == 数字 :字符串转换成数字console.log(1 = ...

最新文章

  1. 高岭土吸附阳离子_工业中高岭土、高岭石中的应用特点!
  2. mybatis plus 使用函数_这些Mybatis-Plus使用技巧,太火了
  3. 学生党专用计算机,开学在即何必纠结?学生党专用显卡推荐
  4. osg渲染到纹理技术(一)
  5. 小米8ios图标包下载_小米互传PC端抢先下载,免流量、高速互传,支持多设备共享...
  6. linux之sed使用技巧
  7. 黑马程序员--java基础加强之内省(IntroSpector)
  8. 委托、事件--委托介绍篇
  9. 3分钟全面了解元数据和数据元
  10. 程序猿学习中华古诗词路径
  11. 企业网络管理利器-SpiceWorks(1)
  12. ADA本月上涨100%,背后或有三个原因
  13. Vue-生命周期(函数)
  14. 智能家居的应用研究现状
  15. 纤巧精干:爱普生六轴机器人
  16. 韩国顶级舞台剧《爱上街舞少年的芭蕾少女》掀起街舞狂潮
  17. 基于微信小程序的签到系统设计与实现-计算机毕业设计源码+LW文档
  18. 【计组期末复习一】第八章:CPU的结构和功能 :指令中各有哪些字段?变址寻址和基址寻址异同?如何设计计算机指令?如何求寻址范围?
  19. html钟表代码运行原理,·钟表指针运行方向的基本原理
  20. java dbcp c3p0_c3p0与dbcp的作用与区别,及使用!

热门文章

  1. flask-whooshalchemy需要注意的一点
  2. 58-混沌感悟.(2015.2.11)
  3. DSOfile,修改windows系统文件摘要
  4. Struts2学习笔记1
  5. WebRTC音视频引擎研究(2)--VoiceEngine音频编解码器数据结构以及参数设置
  6. MVC 3.0错误 HTTP 404您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用。请检查以下 URL 并确保其拼写正确。...
  7. 2个字节能存多少个16进制_Java语言中最大的整数再加1等于多少?看完秒懂
  8. java h2 derby_嵌入式H2数据库的Spring配置以进行测试
  9. epoll哪些触发模式_5.epoll的水平触发和边缘触发
  10. 北京矿大计算机考研每年分数线,2021中国矿业大学北京考研国家线公布时间_国家线是多少分...