国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解React native fetch遇到的坑

2019-11-19 13:06:39
字體:
供稿:網(wǎng)友

最近在自學(xué)react native,學(xué)習過程中遇到了不少的坑,下面將針對登錄這一功能來詳細介紹一下以下遇到的兩個問題。

1.在請求數(shù)據(jù)的時候,一般情況下我們會直接提交Content-type是json數(shù)據(jù)格式的請求。類似

fetch('https://mywebsite.com/endpoint/', { method: 'POST', headers: {  'Accept': 'application/json',  'Content-Type': 'application/json', }, body: JSON.stringify({  firstParam: 'yourValue',  secondParam: 'yourOtherValue', })})

當我開始請求登錄接口的時候,發(fā)現(xiàn)上面的請求方法失效了,想了好多辦法都不知道問題出在哪里,最后試了下抓包,才發(fā)現(xiàn)原來請求登錄接口的時候,content-type是application/x-www-form-urlencode,于是我搜了下這方面的知識。我們在提交表單的時候,form表單參數(shù)中會有一個enctype的參數(shù)。enctype指定了HTTP請求的Content-Type。默認情況下,HTML的form表單的enctype=application/x-www-form-urlencoded。application/x-www-form-urlencoded是指表單的提交,并且將提交的數(shù)據(jù)進行urlencode。默認情況下,我們所有的表單提交都是通過這種默認的方式實現(xiàn)的。文檔中是有記載的:

fetch('https://mywebsite.com/endpoint/', { method: 'POST', headers: {  'Content-Type': 'application/x-www-form-urlencoded', }, body: 'key1=value1&key2=value2'}

2.登錄成功后如何獲取當headers里面的sessionid的問題。

 

登錄成功之后,我們可以打印出上面的response,若是需要取出上面的sessionid,我們可以采用下面的方法,寫法可能比較low,但是可以達到目的

//獲取sidvar 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.登錄成功之后,后臺需要根據(jù)sessionid來判斷登錄狀態(tài)。當請求的接口是必須登錄之后才能獲得數(shù)據(jù)的時候,就不能用傳統(tǒng)的寫法來請求了。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})

在需要登錄后才能獲取數(shù)據(jù)的接口也需要加上

fetch(url , {  credentials: 'include',  method: 'GET',})

此處還要強調(diào)一下get請求和post請求,經(jīng)別人提醒,發(fā)現(xiàn)雖然他寫了個body= {*},讓我誤以為是用POST方式,其實body只是參數(shù)的字段,實際上用的還是GET請求,所以把POST改為GET(默認是GET,所以就不需要寫method),因為GET無法在body里傳參,也不需要header,直接把參數(shù)寫在URL里,只有POST才是在body里傳參。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 库尔勒市| 尼玛县| 鄯善县| 永泰县| 沅陵县| 嫩江县| 屯留县| 壶关县| 敦煌市| 库车县| 隆昌县| 宜昌市| 林甸县| 和林格尔县| 理塘县| 怀来县| 渝中区| 慈利县| 积石山| 吕梁市| 纳雍县| 天津市| 三明市| 咸宁市| 商丘市| 平远县| 南康市| 安徽省| 清流县| 温宿县| 淮阳县| 长子县| 天祝| 桑植县| 花莲市| 砚山县| 西乌珠穆沁旗| 镇沅| 云龙县| 旌德县| 静海县|