ES6 fetch函数与后台交互实现


Posted in Javascript onNovember 14, 2018

最近在学习react-native,遇到调用后端接口的问题.看了看官方文档,推荐使用es6的fetch来与后端进行交互,在网上找了一些资料.在这里整理,方便以后查询.

1.RN官方文档中,可使用XMLHttpRequest

var request = new XMLHttpRequest();
request.onreadystatechange = (e) = >{
  if (request.readyState !== 4) {
    return;
  }
  if (request.status === 200) {
    console.log('success', request.responseText);
  } else {
    console.warn('error');
  }
};
request.open('GET', 'https://mywebsite.com/endpoint.php');
request.send();

这是http的原生方法,这里不做多的介绍.

2.RN官方文档中,推荐使用fetch

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    firstParam: 'yourValue',
    secondParam: 'yourOtherValue',
  })
}).then(function(res) {console.log(res)
})

body中的数据就是我们需要向服务器提交的数据,比如用户名,密码等;如果上述body中的数据提交失败,那么你可能需要把数据转换成如下的表单提交的格式:

fetch('https://mywebsite.com/endpoint/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: 'key1=value1&key2=value2'
}).then(function(res) {

  console.log(res)
})

这样可以获取纯文本的返回数据.

如果你需要返回json格式的数据:

fetch('https://mywebsite.com/endpoint/').then(function(res) {

  if (res.ok) {

    res.json().then(function(obj) {

      // 这样数据就转换成json格式的了

    })

  }

}, function(ex) {
  console.log(ex)
})

fetch模拟表单提交:

fetch('doAct.action', { 

  method: 'post', 

  headers: { 

   "Content-type": "application/x-www-form-urlencoded; charset=UTF-8" 

  }, 

  body: 'foo=bar&lorem=ipsum' 

 })

 .then(json) 

 .then(function (data) { 

  console.log('Request succeeded with JSON response', data); 

 }) 

 .catch(function (error) { 

  console.log('Request failed', error); 

 });

不过无论是ajax还是fetch,都是对http进行了一次封装,大家各取所好吧.

参考文档:https://developer.mozilla.org/zh-CN/docs/Web/API/GlobalFetch/fetch

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery checkbox,radio是否选中的判断代码
Mar 20 Javascript
一个不错的字符串转码解码函数(自写)
Jul 31 Javascript
javascript实现控制div颜色
Jul 07 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
Jul 13 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
Nov 22 Javascript
使用Vue生成动态表单
Nov 26 Javascript
jQuery实现简单弹幕效果
Nov 28 jQuery
node静态服务器实现静态读取文件或文件夹
Dec 03 Javascript
小程序接口的promise化的实现方法
Dec 11 Javascript
微信小程序实现购物车小功能
Dec 30 Javascript
vue 实现click同时传入事件对象和自定义参数
Jan 29 Vue.js
JS中一些高效的魔法运算符总结
May 06 Javascript
vue-cli3全面配置详解
Nov 14 #Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
Nov 14 #Javascript
laydate时间日历插件使用方法详解
Nov 14 #Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 #jQuery
你应该了解的JavaScript Array.map()五种用途小结
Nov 14 #Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
Nov 14 #Javascript
Vue 框架之动态绑定 css 样式实例分析
Nov 14 #Javascript
You might like
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
针对多用户实现头像上传功能PHP代码 适用于登陆页面制作
2016/08/17 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
使用Javascript接收get传递的值的代码
2011/11/30 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
javascript判断移动端访问设备并解析对应CSS的方法
2015/02/05 Javascript
jQuery异步上传文件插件ajaxFileUpload详细介绍
2015/05/19 Javascript
JS实现密码框根据焦点的获取与失去控制文字的消失与显示效果
2015/11/26 Javascript
完美实现js选项卡切换效果(二)
2017/03/08 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
angular4模块中给标签添加背景图的实现方法
2017/09/15 Javascript
webpack搭建vue 项目的步骤
2017/12/27 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
判断JavaScript中的两个变量是否相等的操作符
2019/12/21 Javascript
[47:02]2018DOTA2亚洲邀请赛3月29日 小组赛B组 VP VS paiN
2018/03/30 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
python 消费 kafka 数据教程
2019/12/21 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
岗位廉洁从业承诺书
2014/03/28 职场文书
计划生育标语
2014/06/23 职场文书
警察群众路线整改措施
2014/09/26 职场文书
2015年新学期寄语
2015/02/26 职场文书
预备党员介绍人意见
2015/06/01 职场文书
党支部鉴定意见
2015/06/02 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题
2022/02/12 Redis
一条慢SQL语句引发的改造之路
2022/03/16 MySQL