浅谈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 相关文章推荐
图像替换新技术 状态域方法
Jan 28 Javascript
javascript动态添加样式(行内式/嵌入式/外链式等规则)
Jun 24 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
javascript每日必学之循环
Feb 19 Javascript
Google 地图控件集详解及实例代码
Aug 06 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
将Sublime Text 3 添加到右键中的简单方法
Dec 12 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
javascrit中undefined和null的区别详解
Apr 07 Javascript
微信小程序如何调用json数据接口并解析
Jun 29 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
Jan 18 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
jQuery中get和post方法传值测试及注意事项
2014/08/08 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
Node.js事件驱动
2015/06/18 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
Python类的动态修改的实例方法
2017/03/24 Python
Tensorflow简单验证码识别应用
2017/05/25 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
使用Fabric自动化部署Django项目的实现
2019/09/27 Python
python3.x 生成3维随机数组实例
2019/11/28 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
骨干教师培训制度
2014/01/13 职场文书
服务生自我鉴定
2014/01/22 职场文书
小学清明节活动方案
2014/03/08 职场文书
仓库规划计划书
2014/04/28 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
运输公司工作总结
2015/08/11 职场文书