详解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 相关文章推荐
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
jQuery ready函数滥用分析
Feb 16 Javascript
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 Javascript
Node.js模块加载详解
Aug 16 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
js实现滚动条滚动到页面底部继续加载
Dec 19 Javascript
js实现下拉菜单效果
Mar 01 Javascript
Node.js应用设置安全的沙箱环境
Apr 23 Javascript
使用svg实现动态时钟效果
Jul 17 Javascript
用JS实现选项卡
Mar 23 Javascript
小程序表单认证布局及验证详解
Jun 19 Javascript
Ajax实现页面无刷新留言效果
Mar 24 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
基于mysql的论坛(1)
2006/10/09 PHP
优化PHP程序的方法小结
2012/02/23 PHP
PHP 代码规范小结
2012/03/08 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
Jquery on绑定的事件 触发多次实例代码
2016/12/08 Javascript
Angular工具方法学习
2016/12/26 Javascript
js实现自定义路由
2017/02/04 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
js实现unicode码字符串与utf8字节数据互转详解
2019/03/21 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
VueX模块的具体使用(小白教程)
2020/06/05 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python如何通过protobuf实现rpc
2016/03/06 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
基于nexus3配置Python仓库过程详解
2020/06/15 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
Linux如何修改文件和文件夹的权限
2013/09/05 面试题
学生期末评语大全
2014/04/30 职场文书
学校党员对照检查材料
2014/08/28 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
导游词之日月潭
2019/11/05 职场文书
uniapp开发小程序的经验总结
2021/04/08 Javascript
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Windows server 2012搭建FTP服务器
2022/04/29 Servers
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript