JavaScript fetch接口案例解析


Posted in Javascript onAugust 30, 2018

在 AJAX 时代,进行 API 等网络请求都是通过 XMLHttpRequest 或者封装后的框架进行网络请求。

现在产生的 fetch 框架简直就是为了提供更加强大、高效的网络请求而生,虽然在目前会有一点浏览器兼容的问题,但是当我们进行 Hybrid App 开发的时候,如我之前介绍的 Ionic 和 React Native,都可以使用 fetch 进行完美的网络请求。

如果看网上的fetch教程,会首先对比XMLHttpRequest和fetch的优劣,然后引出一堆看了很快会忘记的内容(本人记性不好)。因此,我写一篇关于fetch的文章,为了自己看着方便,毕竟工作中用到的也就是一些很基础的点而已。

fetch,说白了,就是XMLHttpRequest的一种替代方案。如果有人问你,除了Ajax获取后台数据之外,还有没有其他的替代方案?

这是你就可以回答,除了XMLHttpRequest对象来获取后台的数据之外,还可以使用一种更优的解决方案fetch。

fetch的案例

下面我们来写第一个fetch获取后端数据的例子:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html') // 返回一个Promise对象
 .then((res)=>{
  return res.text() // res.text()是一个Promise对象
 })
 .then((res)=>{
  console.log(res) // res是最终的结果
 })

GET请求

GET请求初步

完成了helloworld,这个时候就要来认识一下GET请求如何处理了。

上面的helloworld中这是使用了第一个参数,其实fetch还可以提供第二个参数,就是用来传递一些初始化的信息。

这里如果要特别指明是GET请求,就要写成下面的形式:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'GET'
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

GET请求的参数传递

GET请求中如果需要传递参数怎么办?这个时候,只能把参数写在URL上来进行传递了。

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html?a=1&b=2', { // 在URL中写上传递的参数
  method: 'GET'
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

POST请求

与GET请求类似,POST请求的指定也是在fetch的第二个参数中:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST' // 指定是POST请求
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

POST请求参数的传递

众所周知,POST请求的参数,一定不能放在URL中,这样做的目的是防止信息泄露。

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST',
  body: new URLSearchParams([["foo", 1],["bar", 2]]).toString() // 这里是请求对象
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

设置请求的头信息

在POST提交的过程中,一般是表单提交,可是,经过查询,发现默认的提交方式是:Content-Type:text/plain;charset=UTF-8,这个显然是不合理的。下面咱们学习一下,指定头信息:

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'POST',
  headers: new Headers({
   'Content-Type': 'application/x-www-form-urlencoded' // 指定提交方式为表单提交
  }),
  body: new URLSearchParams([["foo", 1],["bar", 2]]).toString()
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

这个时候,在谷歌浏览器的Network中查询,会发现,请求方式已经变成了content-type:application/x-www-form-urlencoded。

通过接口得到JSON数据

上面所有的例子中都是返回一个文本,那么除了文本,有没有其他的数据类型呢?肯定是有的,具体查询地址:Body的类型

由于最常用的是JSON数据,那么下面就简单演示一下获取JSON数据的方式:

fetch('https://www.baidu.com/rec?platform=wise&ms=1&rset=rcmd&word=123&qid=11327900426705455986&rq=123&from=844b&baiduid=A1D0B88941B30028C375C79CE5AC2E5E%3AFG%3D1&tn=&clientWidth=375&t=1506826017369&r=8255', { // 在URL中写上传递的参数
  method: 'GET',
  headers: new Headers({
   'Accept': 'application/json' // 通过头指定,获取的数据类型是JSON
  })
 })
 .then((res)=>{
  return res.json() // 返回一个Promise,可以解析成JSON
 })
 .then((res)=>{
  console.log(res) // 获取JSON数据
 })

强制带Cookie

默认情况下, fetch 不会从服务端发送或接收任何 cookies, 如果站点依赖于维护一个用户会话,则导致未经认证的请求(要发送 cookies,必须发送凭据头).

// 通过fetch获取百度的错误提示页面
fetch('https://www.baidu.com/search/error.html', {
  method: 'GET',
  credentials: 'include' // 强制加入凭据头
 })
 .then((res)=>{
  return res.text()
 })
 .then((res)=>{
  console.log(res)
 })

总结

以上所述是小编给大家介绍的JavaScript fetch接口案例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
运用jquery实现table单双行不同显示并能单行选中
Jul 25 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
Nov 26 Javascript
javascript 回调函数详解
Nov 11 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
javascript清空table表格的方法
May 14 Javascript
JS+CSS实现滑动切换tab菜单效果
Aug 25 Javascript
jquery DataTable实现前后台动态分页
Jun 17 jQuery
AngularJs每天学习之总体介绍
Aug 07 Javascript
解决vue路由后界面没有变化,但是链接有的问题
Sep 01 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
Feb 12 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 #Javascript
原生JS实现的简单小钟表功能示例
Aug 30 #Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 #Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 #Javascript
JS实现的input选择图片本地预览功能示例
Aug 29 #Javascript
简述vue状态管理模式之vuex
Aug 29 #Javascript
jQuery实现的简单手风琴效果示例
Aug 29 #jQuery
You might like
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
php字符串截取函数用法分析
2014/11/25 PHP
php 无限分类 树形数据格式化代码
2016/10/11 PHP
TNC vs IO BO3 第一场2.13
2021/03/10 DOTA
js自动生成对象的属性示例代码
2013/10/28 Javascript
使用jQuery管理选择结果
2015/01/20 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
简介Django中内置的一些中间件
2015/07/24 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
python简单实现最大似然估计&scipy库的使用详解
2020/04/15 Python
CSS3对图片照片进行边缘模糊处理的实现
2018/08/08 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
Java工程师面试集锦之Spring框架
2013/06/16 面试题
学生安全教育材料
2014/02/14 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
销售队伍口号
2014/06/11 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
党的作风建设心得体会
2014/10/22 职场文书
教你怎么用Python selenium操作浏览器对象的基础API
2021/06/23 Python
nginx负载功能+nfs服务器功能解析
2022/02/28 Servers
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server