JavaScript fetch接口案例解析


Posted in Javascript onAugust 30, 2018

在 AJAX 时代,进行 API 等网络请求都是通过 XMLHttpRequest 或者封装后的框架进行网络请求。

现在产生的 fetch 框架简直就是为了提供更加强大、高效的网络请求而生,虽然在目前会有一点浏览器兼容的问题,但是当我们进行 Hybrid App 开发的时候,如我之前介绍的 Ionic 和 React Native,都可以使用 fetch 进行完美的网络请求。

如果看网上的fetch教程,会首先对比XMLHttpRequest和fetch的优劣,然后引出一堆看了很快会忘记的内容(本人记性不好)。因此,我写一篇关于fetch的文章,为了自己看着方便,毕竟工作中用到的也就是一些很基础的点而已。

fetch,说白了,就是XMLHttpRequest的一种替代方案。如果有人问你,除了Ajax获取后台数据之外,还有没有其他的替代方案?

这是你就可以回答,除了XMLHttpRequest对象来获取后台的数据之外,还可以使用一种更优的解决方案fetch。

fetch的案例

下面我们来写第一个fetch获取后端数据的例子:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html') // 返回一个Promise对象
 .then((res)=>{
  return res.text() // res.text()是一个Promise对象
 })
 .then((res)=>{
  console.log(res) // res是最终的结果
 })

GET请求

GET请求初步

完成了helloworld,这个时候就要来认识一下GET请求如何处理了。

上面的helloworld中这是使用了第一个参数,其实fetch还可以提供第二个参数,就是用来传递一些初始化的信息。

这里如果要特别指明是GET请求,就要写成下面的形式:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'GET'
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

GET请求的参数传递

GET请求中如果需要传递参数怎么办?这个时候,只能把参数写在URL上来进行传递了。

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html?a=1&b=2', { // 在URL中写上传递的参数
  method: 'GET'
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

POST请求

与GET请求类似,POST请求的指定也是在fetch的第二个参数中:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST' // 指定是POST请求
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

POST请求参数的传递

众所周知,POST请求的参数,一定不能放在URL中,这样做的目的是防止信息泄露。

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST',
  body: new URLSearchParams([["foo", 1],["bar", 2]]).toString() // 这里是请求对象
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

设置请求的头信息

在POST提交的过程中,一般是表单提交,可是,经过查询,发现默认的提交方式是:Content-Type:text/plain;charset=UTF-8,这个显然是不合理的。下面咱们学习一下,指定头信息:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST',
  headers: new Headers({
   'Content-Type': 'application/x-www-form-urlencoded' // 指定提交方式为表单提交
  }),
  body: new URLSearchParams([["foo", 1],["bar", 2]]).toString()
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

这个时候,在谷歌浏览器的Network中查询,会发现,请求方式已经变成了content-type:application/x-www-form-urlencoded。

通过接口得到JSON数据

上面所有的例子中都是返回一个文本,那么除了文本,有没有其他的数据类型呢?肯定是有的,具体查询地址:Body的类型

由于最常用的是JSON数据,那么下面就简单演示一下获取JSON数据的方式:

fetch('https://www.baidu.com/rec?platform=wise&ms=1&rset=rcmd&word=123&qid=11327900426705455986&rq=123&from=844b&baiduid=A1D0B88941B30028C375C79CE5AC2E5E%3AFG%3D1&tn=&clientWidth=375&t=1506826017369&r=8255', { // 在URL中写上传递的参数
  method: 'GET',
  headers: new Headers({
   'Accept': 'application/json' // 通过头指定,获取的数据类型是JSON
  })
 })
 .then((res)=>{
  return res.json() // 返回一个Promise,可以解析成JSON
 })
 .then((res)=>{
  console.log(res) // 获取JSON数据
 })

强制带Cookie

默认情况下, fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于维护一个用户会话,则导致未经认证的请求(要发送 cookies,必须发送凭据头).

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'GET',
  credentials: 'include' // 强制加入凭据头
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

总结

以上所述是小编给大家介绍的JavaScript fetch接口案例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
初学JavaScript第二章
Sep 30 Javascript
JavaScript获取页面中表单(form)数量的方法
Apr 03 Javascript
js使用DOM操作实现简单留言板的方法
Apr 10 Javascript
JavaScript实现的简单幂函数实例
Apr 17 Javascript
JS功能代码集锦
May 04 Javascript
JavaScript实现区块链
Mar 14 Javascript
Node.js中你不可不精的Stream(流)
Jun 08 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
Jun 14 Javascript
微信小程序使用component自定义toast弹窗效果
Nov 27 Javascript
Vue实现导航栏点击当前标签变色功能
Aug 19 Javascript
node爬取新型冠状病毒的疫情实时动态
Feb 06 Javascript
design vue 表格开启列排序的操作
Oct 28 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 #Javascript
原生JS实现的简单小钟表功能示例
Aug 30 #Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 #Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 #Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 #Javascript
简述vue状态管理模式之vuex
Aug 29 #Javascript
jQuery实现的简单手风琴效果示例
Aug 29 #jQuery
You might like
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
BootStrap中Datetimepicker和uploadify插件应用实例小结
2016/05/26 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
python的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
2014/07/09 Python
如何用python整理附件
2018/05/13 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
pycharm中显示CSS提示的知识点总结
2019/07/29 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python Selenium实现无可视化界面过程解析
2020/08/25 Python
Omio美国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/08 全球购物
地球上最先进的胡子和头发修剪器:Bevel
2018/01/23 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
汽车销售求职自荐信
2013/10/01 职场文书
技术人员面试提纲
2013/11/28 职场文书
新护士岗前培训制度
2014/02/02 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
法制宣传月活动总结
2014/04/29 职场文书
公共艺术专业自荐信
2014/09/01 职场文书
接待员岗位职责范本
2015/04/15 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
开学典礼校长致辞
2015/07/29 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android