详解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 相关文章推荐
jquery中ajax学习笔记3
Oct 16 Javascript
extjs render 用法介绍
Sep 11 Javascript
jQuery滚动条插件nanoscroller使用指南
Apr 21 Javascript
js代码实现无缝滚动(文字和图片)
Aug 20 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
Jun 24 Javascript
Angular.js中$apply()和$digest()的深入理解
Oct 13 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
微信小程序中添加客服按钮contact-button功能
Apr 27 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
Nov 13 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
vue+vant实现商品列表批量倒计时功能
Jan 13 Javascript
JavaScript前端面试扁平数据转tree与tree数据扁平化
Jun 14 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
memcache命令启动参数中文解释
2014/01/13 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
Web开发之JavaScript
2012/03/29 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
jquery.validate.js插件使用经验记录
2014/07/02 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
使用Raygun来自动追踪AngularJS中的异常
2015/06/23 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Easyui 去除jquery-easui tab页div自带滚动条的方法
2019/05/10 jQuery
在antd中setFieldsValue和defaultVal的用法
2020/10/29 Javascript
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
[00:35]DOTA2上海特级锦标赛 EG战队宣传片
2016/03/04 DOTA
Python实现从url中提取域名的几种方法
2014/09/26 Python
Python查找相似单词的方法
2015/03/05 Python
Python控制多进程与多线程并发数总结
2016/10/26 Python
使用Python进行QQ批量登录的实例代码
2018/06/11 Python
查看python安装路径及pip安装的包列表及路径
2019/04/03 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
Python实现简单猜数字游戏
2021/02/03 Python
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
土木工程应届生自荐信
2013/09/24 职场文书
室内拓展活动方案
2014/02/13 职场文书
群众路线对照检查材料
2014/09/22 职场文书
四风自我剖析材料思想汇报
2014/10/01 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
药品开票员岗位职责
2015/04/15 职场文书
HttpClient实现表单提交上传文件
2022/08/14 Java/Android