详解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函数般调用正则
Apr 08 Javascript
在js中单选框和复选框获取值的方式
Nov 06 Javascript
jquery animate图片模向滑动示例代码
Jan 26 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
js设置cookie过期及清除浏览器对应名称的cookie
Oct 24 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
详谈构造函数加括号与不加括号的区别
Oct 26 Javascript
自定义Vue组件打包、发布到npm及使用教程
May 22 Javascript
JS中的算法与数据结构之栈(Stack)实例详解
Aug 20 Javascript
解决layui调用自定义方法提示未定义的问题
Sep 14 Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 Javascript
小程序实现背景音乐播放和暂停
Jun 19 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
程序员编程十条戒律
2009/07/09 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
ThinkPHP的SAE开发相关注意事项详解
2016/10/09 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
js中reverse函数的用法详解
2013/12/26 Javascript
jQuery圆形统计图开发实例
2015/01/04 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
深入理解vue-loader如何使用
2017/06/06 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python使用Pandas库常见操作详解
2020/01/16 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Python调用Windows命令打印文件
2020/02/07 Python
Python实现计算图像RGB均值方式
2020/06/04 Python
python 调用API接口 获取和解析 Json数据
2020/09/28 Python
Python如何使用ConfigParser读取配置文件
2020/11/12 Python
苹果香港官方商城:Apple香港
2016/09/14 全球购物
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
车间操作工岗位职责
2013/12/19 职场文书
管道维修工岗位职责
2013/12/27 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
贷款工作证明模板
2015/06/12 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
golang 比较浮点数的大小方式
2021/05/02 Golang
python 详解turtle画爱心代码
2022/02/15 Python
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis