一 序言
  
  在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好。今天我们介绍的Fetch提供了一个更好的替代方法,它不仅提供了一种简单,合乎逻辑的方式来跨网络异步获取资源,而且可以很容易地被其他技术使用,例如 Service Workers。
  
  二 与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方法返回一个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));
  
  }//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
  
  2.fetch请求本地JSON数据
  
  本地有个posts.json数据,与请求本地文本不同的是,得到数据后还要用forEach遍历,最后呈现在页面上。
  
  document.getElementById('button2').addEventListener('click',getJson);
  
  function getJson(){
  
  fetch("posts.json")
  
  .then((res)www.haitianguo.cn => res.json())
  
  .then(data => {
  
  console.log(data);
  
  let output = '';
  
  data.forEach((post) => {
  
  output += `<li>${post.title}</li>`;
  
  })
  
  document.getElementById(www.gxgjpt1.com 'output').innerHTML = output;
  
  })
  
  .catch(err => console.log(err));
  
  }//欢迎加入前端全栈开发交流圈一起吹水聊天学习交流:619586920
  
  3.fetch请求网络接口
  
  【获取数据】,做法与获取本地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 www.gcyL157.com=> {
  
  console.log(data);
  
  let output = '';
  
  data.forEach((user) => {
  
  output += `<li>${user.login}<www.boyunylpt1.com /li>`;
  
  })
  
  document.getElementById('output').innerHTML = output;
  
  })
  
  .catch(err => console.log(err));

解析Fetch实现请求数据的更多相关文章

  1. fetch 如何请求数据

    fetch 如何请求数据 在 传统Ajax 时代,进行 API 等网络请求都是通过XMLHttpRequest或者封装后的框架进行网络请求,然而配置和调用方式非常混乱,对于刚入门的新手并不友好 二 与 ...

  2. Swift 网络请求数据与解析

    一: Swift 网络数据请求与处理最常用第三方 又有时间出来装天才了,还是在学swift,从中又发现一些问题,这两天上网找博客看问题弄的真的心都累.博客一篇写出来,好多就直接照抄,就没有实质性的把问 ...

  3. React native 中使用Fetch请求数据

    一.代码 import React, { Component } from 'react'; import { AppRegistry, StyleSheet, Text, View } from ' ...

  4. 【spring源码学习】springMVC之映射,拦截器解析,请求数据注入解析,DispatcherServlet执行过程

    [一]springMVC之url和bean映射原理和源码解析 映射基本过程 (1)springMVC配置映射,需要在xml配置文件中配置<mvc:annotation-driven >  ...

  5. [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. node后台fetch请求数据-Hostname/IP doesn't match certificate's altnames解决方法

    一.问题背景 基于express框架,node后台fetch请求数据,报错Hostname/IP doesn't match certificate's altnames..... require(' ...

  7. swift Alamofire请求数据与SwiftJson解析

    一直在研究swift 程序最重要的是什么???答案当然是数据啦.  数据对一个程序的影响有多大自己想去吧!!!如果你非要说不重要,那你现在就可以关网页了  哈哈哈哈哈 我呢  swift新手  菜鸟一 ...

  8. 前端向服务器请求数据并渲染的方式(ajax/jQuery/axios/vue)

    原理: jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会显示(成功或者失败都显示数据): return result

  9. [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader

    [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 目录 [源码解析] PyTorch 分布式(2) --- 数据加载之DataLoader 0x00 摘要 0x01 ...

随机推荐

  1. SSM-Spring-23:概念《Spring中的事务是什么?》

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客会详细讲述Spring中的事务,会展开来用语言解释,用于了解概念和准备面试 事务的概念: 一个或者一组 ...

  2. long 与int 比较问题

    long 与int 比较,在32位机器,sizeof都是 占用4个字节: 在window 64位也是占用4个字节 但是在Linux 64位,long占用 8个字节, int占用4个字节,这样比较就会有 ...

  3. 会声会影X10x9x8最新教程

    会声会影X10x9x8最新最全教程,全部都是干货,包含素材的,下载地址:百度网盘, https://pan.baidu.com/s/1AyVS-C_VcTEz_ir70u08xQ 以下为部分内容截图: ...

  4. python3 BeautifulSoup模块使用

    BeautifulSoup就是Python的一个HTML或XML的解析库,可以用它来方便地从网页中提取数据.官方解释如下: Beautiful Soup提供一些简单的.Python式的函数来处理导航. ...

  5. 180620-mysql之数据库导入导出

    文章链接:https://liuyueyi.github.io/hexblog/2018/06/20/180620-mysql之数据库导入导出/ mysql之数据库导入导出 实际工作中,需要做一下数据 ...

  6. Objective-C NSString基本使用 类方法 self关键字

    NSString基本使用 #import <Foundation/Foundation.h> int main() { //最简单的创建字符串的方式 NSString *str = @&q ...

  7. (C#)原型模式—深复制与浅复制

    1.原型模式 用原型实例指定创建对象的实例,并且通过拷贝这些原型创建新的对象. *原型模式隐藏了创建对象的细节,提高了性能. *浅复制:被复制对象的所有变量都含有与原来对象相同的值,而且所有对其他对象 ...

  8. .Net并行编程 - Reactive Extensions(Rx)并发浅析

    关于Reactive Extensions(Rx) 关于Reactive Extensions(Rx),先来看一下来自微软的官方描述: The Reactive Extensions (Rx) is ...

  9. Python3 数据类型-集合

    在Python中集合set是基本数据类型的一种,它有可变集合(set)和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法. 集合 ...

  10. 2019寒假训练营寒假作业(三) 对Sketch——CM-Sketch的理解(理论题部分)

    目录 实验题部分 基本题 1.简述sketch: 2.Count-min Sketch: 开放题部分 理论部分 1.解释为什么 sketch 可以省空间 2.用流程图描述Count-min sketc ...