详解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 相关文章推荐
addEventListener 的用法示例介绍
May 07 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
JavaScript 实现完美兼容多浏览器的复制功能代码
Apr 28 Javascript
浅谈js 闭包引起的内存泄露问题
Jun 22 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
Nov 24 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
Apr 26 Javascript
JS使用正则表达式过滤多个词语并替换为相同长度星号的方法
Aug 03 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
Node.js 的 GC 机制详解
Jun 03 Javascript
layui type2 通过url给iframe子页面传值的例子
Sep 06 Javascript
Vue v-text指令简单使用方法示例
Sep 19 Javascript
JavaScript如何使用插值实现图像渐变
Jun 28 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中文竖排转换实现方法
2015/10/23 PHP
PHP实现基于3DES算法加密解密字符串示例
2018/08/24 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
HR vs CL BO3 第二场 2.13
2021/03/10 DOTA
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
JavaScript常用验证函数实例汇总
2014/11/25 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
Jquery实现鼠标移动放大图片功能实例
2015/03/25 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
微信小程序 action-sheet底部菜单详解
2016/10/27 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
python实现的一个火车票转让信息采集器
2014/07/09 Python
基于Python实现对PDF文件的OCR识别
2016/08/05 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
如何通过50行Python代码获取公众号全部文章
2019/07/12 Python
Python守护进程实现过程详解
2020/02/10 Python
Python爬虫爬取电影票房数据及图表展示操作示例
2020/03/27 Python
Python3 pywin32模块安装的详细步骤
2020/05/26 Python
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Lovedrobe官网:英国领先的大码服装品牌
2019/09/19 全球购物
名词解释WEB SERVICE,SOAP,UDDI,WSDL,JAXP,JAXM;JSWDL开发包的介绍。
2012/10/27 面试题
介绍一下sql server的安全性
2014/08/10 面试题
安全生产先进个人材料
2014/02/06 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2015年党总支工作总结
2015/05/25 职场文书
python神经网络Xception模型
2022/05/06 Python