详解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 相关文章推荐
7个Javascript地图脚本整理
Oct 20 Javascript
JavaScript的parseInt 取整使用
May 09 Javascript
jQuery中;function($,undefined) 前面的分号的用处
Dec 17 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
Sep 05 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
node koa2实现上传图片并且同步上传到七牛云存储
Jul 31 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
Aug 27 Javascript
简单说说如何使用vue-router插件的方法
Apr 08 Javascript
最简单的vue消息提示全局组件的方法
Jun 16 Javascript
微信小程序button标签open-type属性原理解析
Jan 21 Javascript
Vue实现手机扫描二维码预览页面效果
May 28 Javascript
JavaScript 链表定义与使用方法示例
Apr 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编程与应用
2006/10/09 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
php获取当前页面完整URL地址
2015/12/30 PHP
微信公众号开发之通过接口删除菜单
2017/02/20 PHP
PHP 对象继承原理与简单用法示例
2020/04/21 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
javascript正则表达式参数/g与/i及/gi的使用指南
2014/08/27 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
2016/03/21 Javascript
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
JavaScript实现下拉列表
2021/01/20 Javascript
python基于phantomjs实现导入图片
2016/05/13 Python
python 实现自动远程登陆scp文件实例代码
2017/03/13 Python
python实现树形打印目录结构
2018/03/29 Python
python得到电脑的开机时间方法
2018/10/15 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
python之随机数函数的实现示例
2020/12/30 Python
如何选择使用结构还是类
2014/05/30 面试题
新郎父亲婚宴答谢词
2014/01/11 职场文书
主持人婚宴答谢词
2014/01/28 职场文书
小区文明倡议书
2014/05/16 职场文书
倡议书格式
2014/08/30 职场文书
ObjectMapper 如何忽略字段大小写
2021/06/29 Java/Android