浅谈Fetch 数据交互方式


Posted in Javascript onDecember 20, 2018

获取资源很简单,发起一个请求出去,一个响应进来,然后该怎么操作就怎么操作。

fetch 的 api 使用的是 promise 规范,不会 promise(用于延迟(deferred) 计算和异步(asynchronous ) 计算。 一个 Promise 对象代表着一个还未完成,但预期将来会完成的操作。主要使用它处理回调黑洞。) 的请花几分钟学习一下。

使用 fetch 去获取数据的方式:

fetch("服务器地址")

  .then(function(response) {

    //将获取到的数据使用 json 转换对象

    return response.json();

  })

  .then(function(data) {

    //获取转换后的格式

    console.log(data);

  })

  //如果有异常会在 catch 捕获

  .catch(function(e) {

    console.log("error");

  });

有没有发现使用 fetch 后代码变优美了,不关心数据怎么请求的,把更多的精力放在处理数据上。

不用写回调函数了,也不用监听 xhr readystatechange 事件了,当数据请求回来后会传递给 then, 有异常就会直接触发 catch 事件。

fetch 默认发起的是 get 请求,如果需要 post 请求需要设置 Request

Request

Request 客户端向服务器发出请求的一个对象,包括用户提交的信息以及客户端的一些信息

使用 Request 构造一个 fetch 请求的对象的详细信息

//实例化 request 对象
var myRequest = new Request(url, Option);

fetch(myRequest)
  .then(function(response) {
    console.log(response);
  })
  //如果有异常会在 catch 捕获
  .catch(function(e) {
    console.log("error");
  });

Request 详细参数配置:

method

设置请求方式

method = GET / POST / PUT / DELETE / HEAD

headers

设置请求头信息,使用 Headers 对象

let headers = new Headers({

  'Content-Type': 'text/plain'

});

mode

请求的模式,主要用于跨域设置

mode = cors / no-cors / same-origin

cors : 跨域

no-cors : 不跨域

same-origin : 同源

credentials

需要向服务器发送 cookie 时设置

credentials = omit / same-origin

 omit : 省略

same-origin : 发送同源 cookie

cache

cache = default / reload / no-cache

redirect

收到重定向消息时如何处理

redirect = follow / error / manual

follow : 跟随重定向的地址 ,继续请求

error : 不请求

比如:

var request = new Request("url", {

    headers: new Headers({

      "Content-Type": "text/plain"

    }),

    method : "POST",

    mode: "cors",

    redirect : "follow"

  });

fetch(request)

  .then((response) => {

    console.log(response);

  })

  .catch((error)=>{

    console.log(error);

  });

fetch 数据处理

当 fetch 把请求结果拿到后,我们需要使用它提供的几个方法来做处理

json 

fetch 提供了一个 json 方法将数据转换为 json 格式

fetch(url)

  .then((response) => {

    //返回 object 类型

    return response.json();

  })

  .then((result) => {

    console.log(result);

  });

text

fetch 提供了一个 text 方法用于获取数据,返回的是 string 格式数据

fetch(url)

  .then((response) => {

    //返回 string 类型

    return response.text();

  })

  .then((result) => {

    console.log(result);

  });

blob

如果我们获取的是一个图像,需要先设置头信息,然后 fetch 会正常处理本次请求,最终使用 blob 方法获取本次请求的结果, 可以把结果赋值给 img src 就能正常的显示一张图片

var request = new Request("xx.img", {

    headers: new Headers({

      "Content-Type": "image/jpeg"

    }),

    method : "get",

    cache: 'default'

  });

fetch(request)

  .then((response) => {

    return response.blob();

  })

  .then((stories)=>{

    var objectURL = URL.createObjectURL(stories);

    let img = document.createElement("img");

    img.src = objectURL;

    document.querySelector("body").appendChild(img);

  });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
Jun 24 Javascript
文本框只能输入数字的js代码(含小数点)
Jul 10 Javascript
jQuery如何封装输入框插件
Aug 19 Javascript
AngularJS中比较两个数组是否相同
Aug 24 Javascript
微信小程序 获取微信OpenId详解及实例代码
Oct 31 Javascript
微信小程序 网络请求(GET请求)详解
Nov 16 Javascript
Bootstrap输入框组件使用详解
Jun 09 Javascript
深入理解ES6中let和闭包
Feb 22 Javascript
Webpack之tree-starking 解析
Sep 11 Javascript
JavaScript怎样在删除前添加确认弹出框?
May 27 Javascript
vue+vant实现购物车全选和反选功能
Nov 17 Vue.js
cocos2dx+lua实现橡皮擦功能
Dec 20 #Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 #Javascript
fetch 如何实现请求数据
Dec 20 #Javascript
JS闭包经典实例详解
Dec 20 #Javascript
JS闭包原理与应用经典示例
Dec 20 #Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 #Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
Dec 20 #Javascript
You might like
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
一个目录遍历函数
2006/10/09 PHP
PHP邮件专题
2006/10/09 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
php使用curl访问https示例分享
2014/01/17 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP PDOStatement::errorInfo讲解
2019/01/31 PHP
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JavaScript实现带播放列表的音乐播放器实例分享
2016/03/07 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
2017/11/09 jQuery
JavaScript实现点击出现图片并统计点击次数功能示例
2018/07/23 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
Python设计实现的计算器功能完整实例
2017/08/18 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
python实现矩阵打印
2019/03/02 Python
pytorch学习教程之自定义数据集
2020/11/10 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
【HTML5】Canvas绘制简单图片教程
2016/05/13 HTML / CSS
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
Boden澳大利亚官网:英国在线服装公司
2018/08/05 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
财务情况说明书范文
2014/05/06 职场文书
婚礼秀策划方案
2014/05/19 职场文书
入股合作协议书
2014/10/12 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
自荐信格式模板
2015/03/27 职场文书
让生命充满爱观后感
2015/06/08 职场文书
导游词之襄阳古城
2019/09/27 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
在ubuntu下安装go开发环境的全过程
2022/08/05 Golang