详解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 相关文章推荐
客户端静态页面玩分页
Jun 26 Javascript
学习ExtJS Column布局
Oct 08 Javascript
超简单JS二级、多级联动的简单实例
Feb 18 Javascript
jquery获取radio值(单选组radio)
Oct 16 Javascript
js实现分享到随页面滚动而滑动效果的方法
Apr 10 Javascript
JS实现网站菜单拖拽移位效果的方法
Sep 24 Javascript
JS前端加密算法示例
Dec 22 Javascript
深入理解vue Render函数
Jul 19 Javascript
vue+iview/elementUi实现城市多选
Mar 28 Javascript
详解jquery和vue对比
Apr 16 jQuery
Vue如何实现变量表达式选择器
Feb 18 Vue.js
vue项目配置sass及引入外部scss文件
Apr 14 Vue.js
对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学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
php格式化金额函数分享
2015/02/02 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
使用 JScript 创建 .exe 或 .dll 文件的方法
2011/07/13 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
javascript实现日期按月份加减
2015/05/15 Javascript
vue.js初学入门教程(2)
2016/11/07 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
vue里的data要用return返回的原因浅析
2019/05/28 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
通过扫小程序码实现网站登陆功能
2019/08/22 Javascript
浅谈Vue3.0之前你必须知道的TypeScript实战技巧
2019/09/11 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
[02:23]2018DOTA2亚洲邀请赛趣味视频——反应测试
2018/04/04 DOTA
python编程羊车门问题代码示例
2017/10/25 Python
通过Python 获取Android设备信息的轻量级框架
2017/12/18 Python
python 列表,数组和矩阵sum的用法及区别介绍
2018/06/28 Python
python3.4控制用户输入与输出的方法
2018/10/17 Python
基于python tkinter的点名小程序功能的实例代码
2020/08/22 Python
python爬取天气数据的实例详解
2020/11/20 Python
计算机应用专业推荐信
2013/11/13 职场文书
上班睡觉检讨书
2014/01/09 职场文书
优秀民警事迹材料
2014/01/29 职场文书
优秀毕业自我鉴定
2014/02/15 职场文书
物控部经理职务说明书
2014/02/25 职场文书
公司新年寄语
2014/04/04 职场文书
商场消防安全责任书
2014/07/29 职场文书
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android