今天敲代碼的時候被兩個網絡請求的問題搞了一天,不擔心累而且心碎
記錄一下,吃一塹長一智,不知道我老了再來看還能不能看懂
第一個問題:圖片上傳到服務器
這里代碼就不貼出來了,使用的post提交的格式。同樣的代碼,在iOS上可以正常上傳,在android上上傳就是network request failed,
我把代碼對比了半天就是一模一樣,然后報這種無厘頭的錯誤着實讓我心碎,后來android調試,iOS調試搞得我
已經快瘋了,最后才發現原來是是我傳的數據不對,上傳圖片到服務器使用的是本地圖片URL,我忽略了這一點,
總覺得是代碼的問題,問題的方向就是錯誤的,然后左調試右調試才發現不對的地方。以后記住了,像這種post提
交的請求,網絡請求失敗的話肯定是數據問題,因為這都沒走進服務器。
第二個問題:普通的post請求。
這個問題能夠解決純屬偶然,因為我現在還不知道原因出現在哪,情況和第一個比較像,也是post提交,然后報一樣的
錯誤network request failed,,因為剛好把第一個問題解決,再發現這種情況我肯定想肯定是數據不對了,然后就去看數據,
看了半天和后台對比了半天發現不是數據問題,這下真讓我醉了,又是對接口,又是android ,iOS對比調試,我感覺我今
天真是被誰詛咒了明明是一個很簡單的問題卻偏要讓我做不出來,最后解決的也是出於偶然,找了別的地方post請求的,
對比一下,然后以碰運氣的想法寫成這樣
fetch(url,{ method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: "fileList=" + file + "&token=" + this.state.token }) .then((response) => response.json())
一開始我是這樣寫的,這不是一樣的,就是大概給個格式,因為我不想重寫了,
這個地方和上面的代碼不同的地方就是這里用的表單,然后用的options包起來了我們的數據,
對,你猜的沒錯,就是因為這個options的問題,可能我說的不對,但是我的發現就是因為這個問題,
我不用options 包起來像上面的代碼一樣直接請求就OK
let formData = new FormData(); formData.append('file', { uri: this.state.localimageurl, type: 'image/jpeg', name: 'photo.jpg' }); console.log(formData); let options ={}; options.body = formData; options.headers={"Content-Type":"multipart/form-data"}; options.method='POST'; var url = "http://10.4.19.105:8081/aist-filesvr-web/webUploader/uploadPicture"; fetch(url,options) .then((response)=> response.json()) .then((responseData)=>{
console.warn(responseData);
}) .catch((error) => { console.warn(error); }) .done();
最后我想說今天我很不開心