浅谈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 相关文章推荐
JavaScript中prototype为对象添加属性的误区介绍
Oct 15 Javascript
js 获取、清空input type="file"的值示例代码
Feb 19 Javascript
js实现用户注册协议倒计时的方法
Jan 21 Javascript
jQuery对象初始化的传参方式
Feb 26 Javascript
深入解析JavaScript中函数的Currying柯里化
Mar 19 Javascript
AngularJS 入门教程之事件处理器详解
Aug 19 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
Mar 30 Javascript
详解React native全局变量的使用(跨组件的通信)
Sep 07 Javascript
JavaScript 正则命名分组【推荐】
Jun 07 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
Jan 18 jQuery
Vue Cli 3项目使用融云IM实现聊天功能的方法
Apr 19 Javascript
vue打开新窗口并实现传参的图文实例
Mar 04 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
How do I change MySQL timezone?
2008/03/26 PHP
php获取某个目录大小的代码
2008/09/10 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
学习PHP session的传递方式
2016/06/15 PHP
php cookie 详解使用实例
2016/11/03 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
纯Javascript实现Windows 8 Metro风格实现
2013/10/15 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
通过遮罩层实现浮层DIV登录的js代码
2014/02/07 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
2018/05/16 Javascript
JavaScript常用数组操作方法,包含ES6方法
2020/05/10 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
.NET里面如何取得当前的屏幕分辨率
2012/12/06 面试题
小学教师自我鉴定
2013/11/07 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
挂职个人工作总结
2015/03/05 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书