fetch 如何实现请求数据


Posted in Javascript onDecember 20, 2018

一 序言

在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好。今天我们介绍的Fetch提供了一个更好的替代方法,它不仅提供了一种简单,合乎逻辑的方式来跨网络异步获取资源,而且可以很容易地被其他技术使用,例如 Service Workers。

fetch 如何实现请求数据

二 与Ajax对比

使用Ajax请求一个 JSON 数据一般是这样:

var xhr = new XMLHttpRequest();
xhr.open('GET', url/file,true);
xhr.onreadystatechange = function() {
 if(xhr.readyState==4){
  if(xhr.status==200){
   var data=xhr.responseText;
    console.log(data);
 }
};
xhr.onerror = function() {
 console.log("Oh, error");
};
xhr.send();

同样我们使用fetch请求JSON数据:

fetch(url).then(response => response.json())//解析为可读数据
 .then(data => console.log(data))//执行结果是 resolve就调用then方法
 .catch(err => console.log("Oh, error", err))//执行结果是 reject就调用catch方法

从两者对比来看,fetch代码精简许多,业务逻辑更清晰明了,使得代码易于维护,可读性更高。

总而言之,Fetch 优点主要有:

1. 语法简洁,更加语义化,业务逻辑更清晰

2. 基于标准 Promise 实现,支持 async/await

3. 同构方便,使用isomorphic-fetch

三 Promise简介

由于 Fetch API 是基于 Promise 设计,接下来我们简单介绍下Promise工作流程,方便大家更好理解Fetch。

fetch 如何实现请求数据

fetch方法返回一个Promise对象, 根据 Promise Api 的特性, fetch可以方便地使用then方法将各个处理逻辑串起来, 使用 Promise.resolve() 或 Promise.reject() 方法将分别返会肯定结果的Promise或否定结果的Promise, 从而调用下一个then 或者 catch。一旦then中的语句出现错误, 也将跳到catch中。

四 请求常见数据格式

接下来将介绍如何使用fetch请求本地文本数据,请求本地JSON数据以及请求网络接口。其实操作相比与Ajax,简单很多!

//HTML部分
 <div class="container">
 <h1>Fetch Api sandbox</h1>
 <button id="button1">请求本地文本数据</button>
 <button id="button2">请求本地json数据</button>
 <button id="button3">请求网络接口</button>
 <br><br>
 <div id="output"></div>
 </div>
 <script src="app.js"></script>

1.fetch请求本地文本数据

本地有一个test.txt文档,通过以下代码就可以获取其中的数据,并且显示在页面上。

document.getElementById('button1').addEventListener('click',getText);
function getText(){
 fetch("test.txt")
  .then((res) => res.text())//注意:此处是res.text()
  .then(data => {
  console.log(data);
  document.getElementById('output').innerHTML = data;
  })
  .catch(err => console.log(err));
}

2.fetch请求本地JSON数据

本地有个posts.json数据,与请求本地文本不同的是,得到数据后还要用forEach遍历,最后呈现在页面上。

document.getElementById('button2').addEventListener('click',getJson);
function getJson(){
 fetch("posts.json")
  .then((res) => res.json())
  .then(data => {
  console.log(data);
  let output = '';
  data.forEach((post) => {
   output += `<li>${post.title}</li>`;
  })
  document.getElementById('output').innerHTML = output;
  })
  .catch(err => console.log(err));
}

3.fetch请求网络接口

获取https://api.github.com/users中的数据,做法与获取本地JSON的方法类似,得到数据后,同样要经过处理

document.getElementById('button3').addEventListener('click',getExternal);
function getExternal(){
 // https://api.github.com/users
 fetch("https://api.github.com/users")
  .then((res) => res.json())
  .then(data => {
  console.log(data);
  let output = '';
  data.forEach((user) => {
   output += `<li>${user.login}</li>`;
  })
  document.getElementById('output').innerHTML = output;
  })
  .catch(err => console.log(err));
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js继承 Base类的源码解析
Dec 30 Javascript
JQuery UI皮肤定制
Jul 27 Javascript
关于js遍历表格的实例
Jul 10 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
移动端H5开发 Turn.js实现很棒的翻书效果
Jun 20 Javascript
轻松5句话解决JavaScript的作用域
Jul 15 Javascript
bootstrap导航条实现代码
Dec 28 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
js实现本地图片文件拖拽效果
Jul 18 Javascript
webpack4之SplitChunksPlugin使用指南
Jun 12 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
Aug 22 Javascript
JS闭包经典实例详解
Dec 20 #Javascript
JS闭包原理与应用经典示例
Dec 20 #Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 #Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 #Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 #Javascript
微信小程序实现的点击按钮 弹出底部上拉菜单功能示例
Dec 20 #Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
Dec 20 #Javascript
You might like
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
一个经典实用的PHP图像处理类分享
2014/11/18 PHP
PHP数学运算与数据处理实例分析
2016/04/01 PHP
php版微信公众账号第三方管理工具开发简明教程
2016/09/23 PHP
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
javascript 另一种图片滚动切换效果思路
2012/04/20 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
禁止按回车键提交表单的方法
2015/06/11 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
一步步教你利用Canvas对图片进行处理
2017/09/19 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
js中Function引用类型常见有用的方法和属性详解
2019/12/11 Javascript
跟老齐学Python之总结参数的传递
2014/10/10 Python
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python实现的基数排序算法原理与用法实例分析
2017/11/23 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
2018/10/15 Python
对Python3使运行暂停的方法详解
2019/02/18 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python中list的交、并、差集获取方法示例
2019/08/01 Python
python中调试或排错的五种方法示例
2019/09/12 Python
利用python爬取有道词典的方法
2020/12/08 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
德购商城:德国进口直邮商城
2017/06/13 全球购物
古驰英国官网:GUCCI英国
2020/03/07 全球购物
会计专业毕业生自荐信范文
2013/12/20 职场文书
聘任书的写作格式及范文
2014/03/29 职场文书
绿色环保演讲稿
2014/05/10 职场文书
2014年保密工作总结
2014/11/22 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
用Python远程登陆服务器的步骤
2021/04/16 Python
java设计模式--原型模式详解
2021/07/21 Java/Android