浅谈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 相关文章推荐
flash 得到自身url参数的代码
Nov 15 Javascript
基于jquery的下拉框改变动态添加和删除表格实现代码
Sep 12 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
js利用prototype调用Array的slice方法示例
Jun 09 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
Apr 10 Javascript
微信小程序地图导航功能实现完整源代码附效果图(推荐)
Apr 28 Javascript
vuejs移动端实现div拖拽移动
Jul 25 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
JavaScript定时器使用方法详解
Mar 26 Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 Javascript
vue全局使用axios的操作
Sep 08 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 HandlerSocket的使用
2011/05/02 PHP
PHP连接MSSQL2008/2005数据库(SQLSRV)配置实例
2014/10/22 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
thinkPHP使用pclzip打包备份mysql数据库的方法
2016/04/30 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
javascript中常用编程知识
2013/04/08 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
2016/11/05 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
使用Vue 实现滑动验证码功能
2019/06/27 Javascript
vuex 动态注册方法 registerModule的实现
2019/07/03 Javascript
解决VueCil代理本地proxytable无效报错404的问题
2020/11/07 Javascript
[01:10]DOTA2次级职业联赛 - EP战队宣传片
2014/12/01 DOTA
python集合类型用法分析
2015/04/08 Python
python遍历数组的方法小结
2015/04/30 Python
mac下pycharm设置python版本的图文教程
2018/06/13 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
澳大利亚在线时尚精品店:Hello Molly
2018/02/26 全球购物
公司市场部岗位职责
2013/12/02 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
企业年会主持词
2014/03/27 职场文书
奖学金感谢信
2015/01/21 职场文书
建党伟业的观后感
2015/06/01 职场文书
初三英语教学反思
2016/02/15 职场文书
Python 语言实现六大查找算法
2021/06/30 Python
使用Python解决图表与画布的间距问题
2022/04/11 Python