详解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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
javascript之更有效率的字符串替换
Aug 02 Javascript
JavaScript 高级篇之函数 (四)
Apr 07 Javascript
jQuery实现带动画效果的二级下拉导航方法
Mar 11 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
Apr 13 Javascript
ECMAScript6轮播图实践知识总结
Aug 17 Javascript
微信小程序 UI布局常用技巧整理总结
Dec 05 Javascript
layui 表格的属性的显示转换方法
Aug 14 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
Aug 28 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
Sep 11 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
微信小程序 scroll-view的使用案例代码详解
Jun 11 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
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
Web程序工作原理详解
2014/12/25 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
2019/10/10 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
js可突破windows弹退效果代码
2008/08/09 Javascript
js几个验证函数代码
2010/03/25 Javascript
jquery ready()的几种实现方法小结
2010/06/18 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
js为空或不是对象问题的快速解决方法
2013/12/11 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
浅谈Node.js中的定时器
2015/06/18 Javascript
jquery显示隐藏元素的实现代码
2016/05/19 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
获取layer.open弹出层的返回值方法
2018/08/20 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
关于element-ui表单中限制输入纯数字的解决方式
2020/09/08 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python Web服务器Tornado使用小结
2014/05/06 Python
Python-基础-入门 简介
2014/08/09 Python
python中join()方法介绍
2018/10/11 Python
python关于变量名的基础知识点
2020/03/03 Python
Python基于字典实现switch case函数调用
2020/07/22 Python
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
土木工程建筑专业毕业生求职信
2013/10/21 职场文书
合作意向书模板
2014/03/31 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
光棍节联谊晚会活动策划书
2014/10/10 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
前台文员岗位职责
2015/02/04 职场文书
社区干部培训心得体会
2016/01/06 职场文书
中学音乐课教学反思
2016/02/18 职场文书
JavaScript中document.activeELement焦点元素介绍
2021/11/27 Javascript