当前位置: 首页 > news >正文

前端Fetch API接收数据

Fetch API

Fetch API 可以用来获取远程数据,它有两种方式接收结果,同步方式与异步方式

格式

fetch(url, options) // 返回 Promise

同步方式

const 结果 = await Promise
// 后续代码
  • await 关键字必须在一个标记了 async 的 function 内来使用
  • 后续代码在结果返回后执行

异步方式

Promise
	.then(结果 => { ... })
// 后续代码                 
  • 后续代码不必等待结果返回就可以执行

例:

在 express 服务器上有 students.json 文件

[
    { "id": 1, "name": "张三", "sex": "男", "age": 18 },
    { "id": 2, "name": "李四", "sex": "女", "age": 17 }
]

现在用 fetch api 获取这些数据,并展示

同步方式

<script>
    async function findStudents() {
        try {
            // 获取响应对象
            const resp = await fetch('students.json')

            // 获取响应体, 按json格式转换为js数组
            const array = await resp.json();

            // 显示数据
            const tp = document.getElementById("tp");
            const row = tp.content;
            const [c1,c2,c3,c4] = row.querySelectorAll(".col");
            const tbody = document.querySelector('.tbody');
            for(const {id,name,sex,age} of array) {
                c1.textContent = id;
                c2.textContent = name;
                c3.textContent = sex;
                c4.textContent = age;
                // 复制元素
                const newRow = document.importNode(row, true);
                // 建立父子关系
                tbody.appendChild(newRow);
            }
        } catch (e) {
            console.log(e);
        }

    }
    findStudents()
</script>
  • fetch(‘students.json’) 内部会发送请求,但响应结果不能立刻返回,因此 await 就是等待响应结果返回
  • 其中 resp.json() 也不是立刻能返回结果,它返回的也是 Promise 对象,也要配合 await 取结果

异步方式

<script>
    fetch('students.json')
        .then( resp => resp.json() )
        .then( array => {
        	// 显示数据
            const tp = document.getElementById("tp");
            const row = tp.content;
            const [c1,c2,c3,c4] = row.querySelectorAll(".col");
            const tbody = document.querySelector('.tbody');
            for(const {id,name,sex,age} of array) {
                c1.textContent = id;
                c2.textContent = name;
                c3.textContent = sex;
                c4.textContent = age;
                // 复制元素
                const newRow = document.importNode(row, true);
                // 建立父子关系
                tbody.appendChild(newRow);
            }
        })
        .catch( e => console.log(e) )


</script>
  • 第一个 then 是在响应返回后,才会调用它里面的箭头函数,箭头函数参数即 resp 响应对象
  • 第二个 then 是在 json 解析完成后,才会调用它里面的箭头函数,箭头函数参数即解析结果(本例是 array 数组)
  • 上一个 then 返回的是 Promise 对象时,才能链式调用下一个 then

相关文章:

  • 公众号网课接口系统
  • 数据库概述03(jdbc连接)
  • CSS基础知识---扫盲必备~~~
  • 大学网课搜题公众号制作
  • [Codeforces] probabilities (R1600) Part.1
  • 笔试强训(十)
  • 这个 MySQL 问题困扰了我一个月,现在终于把他解决了
  • SOD酶活性测定丨Abbkine超氧化物歧化酶(SOD)活性检测试剂盒
  • 参数解释安捷伦86142B光学分析仪
  • 利用回调函数在driver中收集覆盖率
  • ch05 pointer
  • Java:Kubernetes原生Java与Quarkus
  • 15天深度复习JavaWeb的详细笔记(十二)——综合案例
  • AD生成Gerber及CAM350检查
  • Python数据分析:折线图和散点图的绘制
  • [译]Python中的类属性与实例属性的区别
  • canvas 绘制双线技巧
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • JavaScript函数式编程(一)
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • js 实现textarea输入字数提示
  • webpack4 一点通
  • windows下mongoDB的环境配置
  • Yii源码解读-服务定位器(Service Locator)
  • 从零开始学习部署
  • 从伪并行的 Python 多线程说起
  • 和 || 运算
  • 每天10道Java面试题,跟我走,offer有!
  • 如何设计一个比特币钱包服务
  • 入口文件开始,分析Vue源码实现
  • 使用common-codec进行md5加密
  • 使用putty远程连接linux
  • 正则表达式
  • 自动记录MySQL慢查询快照脚本
  • Linux权限管理(week1_day5)--技术流ken
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • #每日一题合集#牛客JZ23-JZ33
  • (70min)字节暑假实习二面(已挂)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)ABI是什么
  • ***测试-HTTP方法
  • .NET 4.0中使用内存映射文件实现进程通讯
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .Net7 环境安装配置
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • @EventListener注解使用说明
  • @FeignClient注解,fallback和fallbackFactory