基于Promise规范的fetch API的使用
基于Promise规范的fetch API的使用
fetch的使用
作用:fetch 这个API,是专门用来发起Ajax请求的;
fetch 是由原生 JS 提供的 API ,专门用来取代 XHR 这个对象的;
fetch('请求的url地址').then(response => res.json()).then(data= > console.log(data))
// 注意: 第一个.then 中获取到的不是最终的数据,而是一个中间的数据流对象;
// 注意: 第一个 .then 中获取到的数据,是 一个 Response 类型的对象;
// 第二个 .then 中,获取到的才是真正的 数据;
发起 Get 请求:
// 默认 fetch('url') 的话,发起的是 Get 请求
fetch('http://39.106.32.91:3000/api/getlunbo')
.then(response => {
// 这个 response 就是 服务器返回的可读数据流,内部存储的是二进制数据;
// .json() 的作用,就是 读取 response 这个二进制数据流,并把 读取到的数据,转为 JSON 格式的 Promise对象
return response.json()
})
.then(data => {
// 这里,第二个.then 中,拿到的 data,就是最终的数据
console.log(data)
})
发起 Post 请求:
// 这是 查询参数 name=zs&age=20
var sendData = new URLSearchParams()
sendData.append('name', 'ls')
sendData.append('age', 30) fetch('http://39.106.32.91:3000/api/post', {
method: 'POST',
body: sendData // 要发送给服务器的数据
})
.then(response => response.json())
.then(data => console.log(data))
注意: fetch 无法 发起 JSONP 请求
fetch-jsonp的使用
fetch-jsonp最基本的用法:fetchJsonp('https://api.douban.com/v2/movie/in_theaters')
.then(function (response) {
// response.json() 当我们为 response 对象调用了它的 .json() 方法以后,返回的是新的 promise 实例对象
return response.json()
})
.then(function (result) {
console.log(result)
})
注意事项:
- 在调用 fetchJsonp 的时候,小括号中写的就是 你请求的 API 地址
- 当调用 fetchJsonp 以后,得到的是一个 Promise 实例对象,需要为 这个 Promise 实例对象,通过
.then指定成功的回调函数,在第一个.then()中无法拿到最终的数据,拿到的是一个Response类型的对象; - 在 第一个
.then中,需要return response.json()从而返回一个新的Promise 实例; - 为 第一个
.then()中返回的promise实例,再次通过.then指定成功回调,拿到的才是最终的数据;
总结: 第一个.then拿到的是中间数据; 第二个.then中拿到的才是最终的数据;
基于Promise规范的fetch API的使用的更多相关文章
- Axios & fetch api & Promise & POST
Axios & fetch api & Promise & POST https://github.com/axios/axios https://appdividend.co ...
- (转)这个API很“迷人”——新的Fetch API
原文:https://hacks.mozilla.org/2015/03/this-api-is-so-fetching 原标题是This API is So Fetching,Fetching也可以 ...
- Fetch API 了解 及对比ajax、axois
Fetch是什么 Fetch 是一个现代的概念, 等同于 XMLHttpRequest.它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性.Fetch被很多浏览器所支 ...
- 了解 Fetch API与Fetch+Async/await
背景 提及前端与服务器端的异步通信,离不开 Ajax (Asynchronous JavaScript and XML).实际上我们常说的 Ajax 并非指某一项具体的技术,它主要是基于用脚本操作 H ...
- queue-fun —— nodejs下基于Promise的队列控制模块。
工作告一段落,闲来无事,写了一个在nodejs实现“半阻塞”的控制程序. 一直以来,nodejs以单线程非阻塞,高并发的特性而闻名.搞这个“半阻塞”是东西,有什么用呢? 场景一: 现在的web应用可有 ...
- Ajax新玩法fetch API
目前 Web 异步应用都是基于 XMLHttpRequest/ActiveXObject (IE)实现的, 这些对象不是专门为资源获取而设计的,因而它们的 API 非常复杂,同时还需要开发者处理兼容性 ...
- Axios 是一个基于 promise 的 HTTP 库
Axios 是一个基于 promise 的 HTTP 库 vue项目中关于axios的简单使用 axios介绍 Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.j ...
- Fetch API 接口参考
前言 Fetch API是新的ajax解决方案,用于解决古老的XHR对象不能实现的问题,Fetch API 提供了一个获取资源的接口(包括跨域请求),任何使用过 XMLHttpRequest 的人都能 ...
- Cross-origin resource sharing JSON with Padding 同源策略 JSONP 为什么form表单提交没有跨域问题,但ajax提交有跨域问题? XMLHttpRequest and the Fetch API follow the same-origin policy 预检请求(preflight request)
https://zh.wikipedia.org/wiki/跨来源资源共享 跨来源资源共享(CORS)是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略[1 ...
随机推荐
- Spring源码分析(一)基本介绍
摘要:本文结合<Spring源码深度解析>来分析Spring 5.0.6版本的源代码.若有描述错误之处,欢迎指正. 前言 作为一名开发人员,阅读源码是一个很好的学习方式.本文将结合< ...
- Jmeter新手频犯错误之一(登录)
昨天被人问了一个问题:为什么我用Jmeter先创建一个登录请求,然后创建一个操作(比如计算账单)请求,运行之后结果树中却是status_code=401(即登录失败),我明明登录了啊.... emmm ...
- 传入一个integer数组,取出最大、最小值
/** * <p> * 传入一个integer数组,取出最大值 * </p> * @author yunns 2015年11月19日 * @param array * @ret ...
- iOS 用KVC设置结构体
iOS 用KVC设置结构体 在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体.这很不面向对象. 执行下面的语句将会报错: [self setValue:@() forKeyPat ...
- OO第一次博客作业总结反思
使用了masteruml插件来生成类图和metrics插件分析代码 第一次作业 1.UML类图 >在第一次作业中,使用了两个类,代码中有没有使用的变量与函数,为平衡两个类的内容,我将输出函数放在 ...
- 在centos环境下编译安装myrocksdb
rocksdb(https://rocksdb.org.cn/)是脸书(facebook)公司开源的一个key-value存储引擎,基于leveldb开发.rocksdb使用的是LSM存储引擎,纯c+ ...
- windbg调试虚拟机win7系统
调试机:win10 1809 虚拟机: win7 windbg属性设置,在目标后面加上紫色字体参数: "D:\Program Files\Debugging Tools for Windo ...
- 小程序犯错(一):“ReferenceError: 模拟服务器传来的数据 is not defined”
学习数据绑定,在onLoad中模拟服务器传数据时,报错:模拟服务器传来的数据 is not defined 我这里粗心的忘记注释说明了,如下: 把该行无关的错误数据注释或删除即可.这里提醒同学们,出现 ...
- Scratch 3.0 版本比较
新年伊始MIT 就正式 发布了Scratch最新3.0版 ,以 HTML5.0 为基础的版本! 本文就来带看看3.0版有哪些更新的地方. 下图是进入后第一个画面,跟Scratch 2.0 很像,熟悉的 ...
- SAP交货单增强MV50AFZ1问题
在MV50AFZ1这个出口的子程序FORM USEREXIT_SAVE_DOCUMENT_PREPARE.中进行了一些控制 当VL01N创建交货单点击保存的时候检查行项目的信息,如果有问题给出TYPE ...