前端培训-中级阶段(28)- fetch请求(2019-12-5期)

简介: 前端最基础的就是 HTML+CSS+Javascript。掌握了这三门技术就算入门,但也仅仅是入门,现在前端开发的定义已经远远不止这些。前端小课堂(HTML/CSS/JS),本着提升技术水平,打牢基础知识的中心思想,我们开课啦(每周四)。

前言



fetch 用于获取资源(包括跨域请求),其实和 XMLHttpRequest 差不多。那么为什么 AJAX 的解决方案已经有了,我们还要搞出一个新的API?


其实这是符合规则的。不是说 XMLHttpRequest 不好。而是科技发展就是这样,过个几年就要来点颠覆性的更新。


XMLHttpRequest 后面都叫 XHR 吧。


fetch 特点



  1. 默认不带 Cookie,这是一大槽点,我才接触的时候就经常吐槽(但是现在已经改了)。


自从2017年8月25日后,默认的 credentials 政策变更为 same-originFirefox 也在 61.0b13 中改变默认值 使用 Fetch - mdn

  1. 请求不能中途终止(XHRabort()
浏览器已经开始为 AbortController AbortSignal 接口(也就是Abort API)添加实验性支持,允许像 Fetch 和 XHR 这样的操作在还未完成时被中止 Fetch API - mdn

  1. Promise,写起来的确是比回调舒服
  2. 上传进度、下载进度(当做流,然后处理也能模拟)

fetch 语法



fetch(input [, init]);


input 入参


  1. 字符串类型、一个可以访问的URL地址。


  1. Request 对象。在 sw 中 fetch 事件捕获到的就是 Request 对象。


init 入参


这是一个对象。

  1. method请求方式
  1. 字符串类型 getpostput


  1. headers请求头

a.Headers 对象


b.对象形式


bVbBkAr.webp.jpg


3.body消息体,支持的和 XHR 一样。get 需要自己拼接在URL上


  1. Blob、File 比如input选择的文件
  2. Buffer
  3. FormData 表单上传 content-type: multipart/form-data
  4. URLSearchParams content-type: application/x-www-form-urlencoded
  5. String


4.mode

  1. 字符串类型
  1. cors 跨域请求
  2. no-cors 正常的网络请求(默认)
  3. same-origin 只请求同域


5.credentialscookie携带的方式

  1. 字符串类型
  1. omit 不携带 cookie (早期默认值,后来改了)
  2. same-origin 同域请求携带 cookie (默认值)
  3. include 一直携带 cookie。不考虑同域跨域


6.cache缓存模式

  1. 字符串类型 defaultno-storereloadno-cacheforce-cacheonly-if-cached


7.redirect重定向处理方式


  1. 字符串类型
  1. follow 自动处理,跟随跳转(早期默认值,后来改了)
  2. manual 阻止、(默认值)
  3. error 禁止处理


8.referrer请求来源

  1. 字符串类型 url地址,不可跨域。可以是相对路径
  1. client 标识客户端自己处理。默认
  2. no-referrer 不传递


9.referrerPolicy


  1. 字符串类型 no-referrerno-referrer-when-downgradeoriginorigin-when-cross-originunsafe-url


10.integrity 校验


fetch 使用实战



get请求


fetch(`https://www.lilnong.top/cors/get?ref=SF`)
    .then(v=>v.json())
    .then(v=>console.log(v))


post请求


因为get的不涉及到 content-type 所以还相对的简单一些。下面我们来针对不同的 content-type 写一下


application/json


fetch(`https://www.lilnong.top/cors/post?ref=SF`,{
        method:'post',
        headers: {'content-type':'application/json'},
        body:JSON.stringify({bodyRef:'SF'})
    })
    .then(v=>v.json())
    .then(v=>console.log(v))


multipart/form-data


fm = new FormData();
fm.append('type','formdata')
fm.append('bodyRef','SF')
fetch(`https://www.lilnong.top/cors/post?ref=SF`,{
        method:'post',
        body:fm
    })
    .then(v=>v.json())
    .then(v=>console.log(v))


application/x-www-form-urlencoded


fetch(`https://www.lilnong.top/cors/post?ref=SF`,{
        method:'post',
        body:new URLSearchParams({type: 'URLSearchParams',bodyRef:'SF'})
    })
    .then(v=>v.json())
    .then(v=>console.log(v))


post 上传文件


上传文件只能使用multipart/form-data。所以我们就是用FormData 对象。有时候我们需要给文件添加 filename


append 方案


fm.append(name,value,filename) value里面放 Blob 对象或者File 都可以。这里可以传入 filename


File 方案


File 对象自带 filename, new File(fileBits, fileName, options) 可以把 Blob 初始化成 File 对象。


ajax 获取图片并渲染


fetch(`//cors-www.lilnong.top/static/img/wx-linong.jpg`)
    .then(v=>v.blob())
    .then(v=>console.log(v,URL.createObjectURL(v)))


fetch 下载进度条展示


文章地址


测试地址-fetch显示进度条并下载


bVbtb2M.webp.jpg

相关文章
|
前端开发 API UED
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
Python后端与前端交互新纪元:AJAX、Fetch API联手,打造极致用户体验!
399 2
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
存储 缓存 监控
|
JSON 前端开发 测试技术
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
1210 10
大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
994 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
前端开发 JavaScript Java
前端解决axios请求的跨域问题【2步完成】
本文介绍如何通过前端配置解决跨域问题,主要针对Vue项目中的`vite.config.js`文件进行修改。作者在联调过程中遇到跨域报错
1090 1
|
前端开发 JavaScript
回顾前端页面发送ajax请求方式
回顾前端页面发送ajax请求方式
193 18
|
前端开发 JavaScript API
前端Get请求能在body上传参吗
【10月更文挑战第11天】 在浏览器环境中,GET请求的body参数会被忽略,这是因为浏览器中的XHR和fetch实现限制了这一行为。而在Node.js服务端环境中,GET请求可以在body中传递参数,因为服务端请求库没有这样的限制。实际上,GET请求不带body是HTTP标准的一部分,但在某些场景下,为了遵循RESTful规范,可以考虑通过服务端转发或BFF模式来实现复杂的参数传递。
|
移动开发 前端开发 HTML5
SharedWorker 优化前端轮询请求
【10月更文挑战第6天】
334 2
|
存储 前端开发 安全
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
前端轮询问题之在setTimeout版轮询中,如何避免旧请求的响应继续触发定时
358 1

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
    1167
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    512
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    398
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    390
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    507
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    678
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    1200
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    272
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    997
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    467