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 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
js中typeof的用法汇总
Dec 12 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
JavaScript代码应该放在HTML代码哪个位置比较好?
Oct 16 Javascript
jQuery提示效果代码分享
Nov 20 Javascript
javascript中sort排序实例详解
Jul 24 Javascript
React/Redux应用使用Async/Await的方法
Nov 16 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
Mar 15 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
详解小程序循环require之坑
Mar 08 Javascript
微信小程序点击item使之滚动到屏幕中间位置
Mar 25 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&amp;MYSQL服务器配置说明
2006/10/09 PHP
PHP中将数组转成XML格式的实现代码
2011/08/08 PHP
php空间不支持socket但支持curl时recaptcha的用法
2011/11/07 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
Prototype 工具函数 学习
2009/07/23 Javascript
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
javascript操作cookie的文章(设置,删除cookies)
2010/04/01 Javascript
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
js装饰设计模式学习心得
2018/02/17 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
简单介绍Python中的len()函数的使用
2015/04/07 Python
总结Python编程中三条常用的技巧
2015/05/11 Python
python实现自动重启本程序的方法
2015/07/09 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Pipenv一键搭建python虚拟环境的方法
2018/05/22 Python
Python函数any()和all()的用法及区别介绍
2018/09/14 Python
浅谈Python爬虫基本套路
2019/03/25 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
python 串行执行和并行执行实例
2020/04/30 Python
法国在线宠物店:zooplus.fr
2018/02/23 全球购物
德国价格合理的品牌商品购物网站:averdo
2019/03/21 全球购物
常务副总经理岗位职责
2014/04/12 职场文书
考试诚信承诺书
2014/05/23 职场文书
客户答谢会致辞
2015/07/30 职场文书