浅谈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 面向对象(三)接口代码
May 23 Javascript
基于jquery实现的一个选择中国大学的弹框 (数据、步骤、代码)
Jul 26 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
Jan 13 Javascript
JavaScript实现鼠标点击导航栏变色特效
Feb 08 Javascript
JS中定位 position 的使用实例代码
Aug 06 Javascript
移动端效果之IndexList详解
Oct 20 Javascript
AngularJS与后端php的数据交互方法
Aug 13 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
Oct 01 Javascript
vue router 用户登陆功能的实例代码
Apr 24 Javascript
layui自定义插件citySelect实现省市区三级联动选择
Jul 26 Javascript
webpack常用构建优化策略小结
Nov 21 Javascript
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
php htmlentities和htmlspecialchars 的区别
2008/08/18 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
PHP使用range协议实现输出文件断点续传代码实例
2014/07/04 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
php版微信公众号自定义分享内容实现方法
2016/09/22 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
2016/09/26 PHP
详解PHP归并排序的实现
2016/10/18 PHP
JavaScript中两种链式调用实现代码
2011/01/12 Javascript
初识JQuery 实例一(first)
2011/03/16 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
JavaScript检测鼠标移动方向的方法
2015/05/22 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
2016/04/14 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
Django的用户模块与权限系统的示例代码
2019/07/24 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
python sorted函数的小练习及解答
2019/09/18 Python
Python3 sys.argv[ ]用法详解
2019/10/24 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
安踏官方商城:anta.cn
2019/12/16 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
少先队学雷锋活动总结范文
2014/03/09 职场文书
小学生教师节演讲稿
2014/09/03 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
贷款收入证明格式
2015/06/24 职场文书
幼儿园六一儿童节主持词
2015/06/30 职场文书
Vue全局事件总线你了解吗
2022/02/24 Vue.js