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 相关文章推荐
Javascript 日期处理之时区问题
Oct 08 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
Dec 04 Javascript
JavaScript原生对象常用方法总结(推荐)
May 13 Javascript
AngularJS在IE8的不支持的解决方法
May 13 Javascript
微信小程序 九宫格实例代码
Jan 21 Javascript
实例详解JSON取值(key是中文或者数字)方式
Aug 24 Javascript
javascript变量提升和闭包理解
Mar 12 Javascript
vue图片上传组件使用详解
Dec 23 Javascript
jquery传参及获取方式(两种方式)
Feb 13 jQuery
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
vue实现整屏滚动切换
Jun 29 Javascript
jquery轮播图插件使用方法详解
Jul 31 jQuery
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
第六节 访问属性和方法 [6]
2006/10/09 PHP
最省空间的计数器
2006/10/09 PHP
使用PHP Socket写的POP3类
2013/10/30 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
Jquery CheckBox全选方法代码附js checkbox全选反选代码
2010/06/09 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
JS小游戏之象棋暗棋源码详解
2014/09/25 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
Bootstrap基本组件学习笔记之下拉菜单(7)
2016/12/07 Javascript
Websocket协议详解及简单实例代码
2016/12/12 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
JS中DOM元素的attribute与property属性示例详解
2018/09/04 Javascript
python列表操作使用示例分享
2014/02/21 Python
Python实现处理管道的方法
2015/06/04 Python
python实现求特征选择的信息增益
2018/12/18 Python
Python pip配置国内源的方法
2020/02/14 Python
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
西班牙品牌鞋子、服装和配饰在线商店:Esdemarca
2021/02/17 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
高中生学习的自我评价
2013/12/14 职场文书
大学生职业生涯规划书参考模板
2014/03/05 职场文书
环保标语口号
2014/06/13 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
小学教师自我评价
2015/03/04 职场文书
2015年暑期见闻
2015/07/14 职场文书
简历自我评价:教师师德表现自我评价
2019/04/24 职场文书
图解上海144收音机
2021/04/22 无线电
mysql insert 存在即不插入语法说明
2022/03/25 MySQL
讲解Python实例练习逆序输出字符串
2022/05/06 Python