详解React native fetch遇到的坑


Posted in Javascript onAugust 30, 2018

最近在自学react native,学习过程中遇到了不少的坑,下面将针对登录这一功能来详细介绍一下以下遇到的两个问题。

1.在请求数据的时候,一般情况下我们会直接提交Content-type是json数据格式的请求。类似

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

当我开始请求登录接口的时候,发现上面的请求方法失效了,想了好多办法都不知道问题出在哪里,最后试了下抓包,才发现原来请求登录接口的时候,content-type是application/x-www-form-urlencode,于是我搜了下这方面的知识。我们在提交表单的时候,form表单参数中会有一个enctype的参数。enctype指定了HTTP请求的Content-Type。默认情况下,HTML的form表单的enctype=application/x-www-form-urlencoded。application/x-www-form-urlencoded是指表单的提交,并且将提交的数据进行urlencode。默认情况下,我们所有的表单提交都是通过这种默认的方式实现的。文档中是有记载的:

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

2.登录成功后如何获取当headers里面的sessionid的问题。

详解React native fetch遇到的坑 

登录成功之后,我们可以打印出上面的response,若是需要取出上面的sessionid,我们可以采用下面的方法,写法可能比较low,但是可以达到目的

//获取sid
var headers = response.headers.get("set-cookie");
var header = headers.split(";");
var sessionid;
for(var index = 0; index < header.length; index++)
{
  if(header[index].indexOf("JSESSIONID") > -1){
    sessionid = header[index].split("=")[1];
  }
}
//保存
AsyncStorage.setItem('sessionid', sessionid);

3.登录成功之后,后台需要根据sessionid来判断登录状态。当请求的接口是必须登录之后才能获得数据的时候,就不能用传统的写法来请求了。javascript 使用fetch进行跨域请求时默认是不带cookie的,所以会造成 session失效。那所以在登录请求的时候需要加上credentials: ‘include'这个字段。

fetch(Api.checkLoginSecurity , {
  credentials: 'include',
  method: 'POST',
  headers:{
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: 'username='+ this.props.userName + '&password=' + this.userPassword
})

在需要登录后才能获取数据的接口也需要加上

fetch(url , {
  credentials: 'include',
  method: 'GET',
})

此处还要强调一下get请求和post请求,经别人提醒,发现虽然他写了个body= {*},让我误以为是用POST方式,其实body只是参数的字段,实际上用的还是GET请求,所以把POST改为GET(默认是GET,所以就不需要写method),因为GET无法在body里传参,也不需要header,直接把参数写在URL里,只有POST才是在body里传参。

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

Javascript 相关文章推荐
漂亮的widgets,支持换肤和后期开发新皮肤
Apr 23 Javascript
用javascript实现的仿Flash广告图片轮换效果
Apr 24 Javascript
JS将表单导出成EXCEL的实例代码
Nov 11 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
原生JS实现图片轮播切换效果
Dec 15 Javascript
Django使用多数据库的方法
Sep 06 Javascript
基于vue-resource jsonp跨域问题的解决方法
Feb 03 Javascript
React Navigation 使用中遇到的问题小结
May 08 Javascript
JavaScript基础教程之如何实现一个简单的promise
Sep 11 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
webpack proxy 使用(代理的使用)
Jan 10 Javascript
详解基于element的区间选择组件校验(交易金额)
Jan 07 Javascript
对Vue2 自定义全局指令Vue.directive和指令的生命周期介绍
Aug 30 #Javascript
原生JS实现简单的倒计时功能示例
Aug 30 #Javascript
JavaScript fetch接口案例解析
Aug 30 #Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 #Javascript
原生JS实现的简单小钟表功能示例
Aug 30 #Javascript
使用Node搭建reactSSR服务端渲染架构
Aug 30 #Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 #Javascript
You might like
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
PHP判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP实现微信对账单处理
2018/10/01 PHP
PHP 枚举类型的管理与设计知识点总结
2020/02/13 PHP
Jquery 实现table样式的设定
2015/01/28 Javascript
纯HTML5制作围住神经猫游戏-附源码下载
2015/08/23 Javascript
详解AngularJS控制器的使用
2016/03/09 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
2019/06/10 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
介绍Python中的fabs()方法的使用
2015/05/14 Python
PyQt5每天必学之像素图控件QPixmap
2018/04/19 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
Python使用pickle进行序列化和反序列化的示例代码
2020/09/22 Python
Python通过fnmatch模块实现文件名匹配
2020/09/30 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
HTML5新增form控件和表单属性实例代码详解
2019/05/15 HTML / CSS
大学生求职简历的自我评价范文
2013/10/12 职场文书
六十大寿答谢词
2014/01/12 职场文书
幼儿园新学期寄语
2014/01/18 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
个人纪律作风整改措施思想汇报
2014/10/12 职场文书
国博复兴之路观后感
2015/06/02 职场文书
2019年教师入党申请书
2019/06/27 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
python 三边测量定位的实现代码
2021/04/22 Python
python scipy 稀疏矩阵的使用说明
2021/05/26 Python