浅谈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 相关文章推荐
[Web]防止用户复制页面内容和另存页面的方法
Feb 06 Javascript
javascript实现图片轮播效果
Jan 20 Javascript
JQuery DIV 动态隐藏和显示的方法
Jun 23 Javascript
用js动态添加html元素,以及属性的简单实例
Jul 19 Javascript
详解Webpack DLL用法以及功能
Jul 11 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
Dec 05 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
Dec 22 Javascript
Node.js Express安装与使用教程
May 11 Javascript
vue使用技巧及vue项目中遇到的问题
Jun 04 Javascript
extjs4图表绘制之折线图实现方法分析
Mar 06 Javascript
Openlayers实现图形绘制
Sep 28 Javascript
vue 给数组添加新对象并赋值
Apr 20 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
DC宇宙的第一个英雄,堪称动漫史鼻祖,如今成为美国文化的象征
2020/04/09 欧美动漫
使用PHP获取网络文件的实现代码
2010/01/01 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
php文件操作相关类实例
2015/06/18 PHP
CI框架的安全性分析
2016/05/18 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
2018/04/20 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
jQuery 入门讲解1
2009/04/15 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
jquery删除table当前行的实例代码
2016/10/07 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
bootstrap-table实现服务器分页的示例 (spring 后台)
2017/09/01 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
解决vue2中使用axios http请求出现的问题
2018/03/05 Javascript
深入理解Vue router的部分高级用法
2018/08/15 Javascript
浅谈vue项目4rs vue-router上线后history模式遇到的坑
2018/09/27 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python 多线程Threading初学教程
2017/08/22 Python
python之cv2与图像的载入、显示和保存实例
2018/12/05 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
tensorflow自定义激活函数实例
2020/02/04 Python
简述python&pytorch 随机种子的实现
2020/10/07 Python
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
广告学专业推荐信范文
2013/11/23 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
小学班主任寄语大全
2014/04/04 职场文书
践行党的群众路线心得体会
2014/11/05 职场文书
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers