详解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 相关文章推荐
JavaScipt基本教程之JavaScript语言的基础
Jan 16 Javascript
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
checkbox使用示例
Aug 23 Javascript
JS获取键盘上任意按键的值(实例代码)
Nov 12 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
Apr 23 Javascript
javascript生成随机颜色示例代码
May 05 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
Jul 01 Javascript
jquery获取当前日期的方法
Jan 14 Javascript
JS实现的网页倒计时数字时钟效果
Mar 02 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
Sep 30 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
Aug 02 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 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中对用户身份认证实现两种方法
2011/06/04 PHP
php时区转换转换函数
2014/01/07 PHP
php模拟登陆的实现方法分析
2015/01/09 PHP
CodeIgniter 完美解决URL含有中文字符串
2016/05/13 PHP
微信公众平台开发(五) 天气预报功能开发
2016/12/03 PHP
ExtJS 2.0实用简明教程之应用ExtJS
2009/04/29 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
js页面跳转的常用方法整理
2013/10/18 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
JavaScript中this详解
2015/09/01 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
BootStrap3中模态对话框的使用
2017/01/06 Javascript
Vue.directive自定义指令的使用详解
2017/03/10 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
bootstrap响应式表格实例详解
2017/05/15 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
详解html-webpack-plugin用法全解
2018/01/22 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
vue实现微信二次分享以及自定义分享的示例
2019/03/20 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[01:06:30]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第二场 1月9日
2021/03/11 DOTA
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
数据挖掘之Apriori算法详解和Python实现代码分享
2014/11/07 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
浅析python内置模块collections
2019/11/15 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
python字典的值可以修改吗
2020/06/29 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
监察建议书格式
2014/05/19 职场文书
护士岗位竞聘书
2015/09/15 职场文书
left join、inner join、right join的区别
2021/04/05 MySQL