vue使用formData時候傳遞參數(shù)是個空值的情況處理
使用formData時候傳遞參數(shù)是個空值的情況
關(guān)于在vue中使用axios,傳遞的參數(shù)是formData的情況(上傳文件,圖片,文檔等)
formData用途
1.將from表單元素的name和value結(jié)合,實現(xiàn)表單數(shù)據(jù)的序列化
2.異步上傳文件
使用formData
1.創(chuàng)建一個空對象
var formData = new FormData(); //大部分情況下,使用formData追加數(shù)據(jù),是通過append() Api來進行追加 formData.append(key,value) //取出追加的值 formData.get(key) //修改值 formData.set(key,newVale)
2.通過表單對formData進行初始化
<form id="myForm"> ? ? <p>name:<input type="text" name="name" ?value="xiaolong"></p> ? ??? ?<p>age:<input type="text" name="age" ?value="23"></p> ? ? <p><input type="button" id="btn" value="添加"></p> </form>
通過表單元素作為參數(shù),對formData進行初始化
var btn=document.querySelector("#btn"); btn.onclick=function(){ ? ? //獲取表單元素 ? ? var form=document.querySelector("#myForm"); ? ? //初始化表單 ? ? var formdata=new FormData(form); ?? ?//此時可以進行一個操作,獲取或者設(shè)置表單的值或者直接提交整個表單 ? ? console.log(formdata.get("name"));//xiaolong }
具體表單的操作API
大部分可以從mdn上面查找到
舉個例子:
獲取表單數(shù)據(jù)或者獲取整個表單對應(yīng)key的數(shù)據(jù)
formData.get('age')//獲取一個key為age的值 formData.getAll('age')//獲取全部key為age的數(shù)據(jù)
在vue里面使用formData的時候,因為axios是進行了二次封裝,所以傳遞表達的時候會傳遞一個空表單過去,這是因為axios在進行二次封裝的時候回影響到原來的表單提交或者文件上傳
因此在使用二次封裝axios的時候需要進行一個參數(shù)的設(shè)置
this.$axios({ ? ? method: "post", ? ? url: `你的請求地址`, ? ? data: formD,//這個是我的fromdata ? ? headers: { ? ? transformRequest: [data => data]//此處是我進行設(shè)置的轉(zhuǎn)換數(shù)據(jù)類型 ? ? } })
關(guān)于formData傳參問題
目前再做一個支付寶小程序的項目,使用web-view嵌套h5。
做上傳圖片功能時發(fā)現(xiàn)在ios下的formData傳值有問題,安卓下就是好的。因為web-view嵌套h5不支持上傳圖片功能。ios給參數(shù)做了一些封裝,所以后端接收不到。
然后我就可以利用axios 的transformRequest 配置項。原本調(diào)用接口傳參方式,由傳遞formdata格式,改為直接傳遞普通數(shù)據(jù),在transformRequest中組裝formdata參數(shù)。
?async takePicFiles(file: any) { ? ? if (file != null) { ? ? ? try { ? ? ? ? const res = await ocrImg({ ? ? ? ? ? shopId: getShopId(), ? ? ? ? ? img: file, ? ? ? ? }); ? ? ? } catch (e) {} ? ? } ? }
export const ocrImg = (data:any)=>{ ? ? return http.request({ ? ? ? ? url: httpStr + '/output/invoiceOcr/ocrImg', ? ? ? ? method: 'post', ? ? ? ? data, ? ? ? ? transformRequest: [function (data: any) { ? ? ? ? ? ? const formdata = new FormData() ? ? ? ? ? ? formdata.append("shopId", data.shopId); ? ? ? ? ? ? formdata.append("img",data.img); ? ? ? ? ? ? return formdata ? ? ? ? }], ? ? ? ? type: 'application/x-www-form-urlencoded', ? ? }) }
問題解決了
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue3封裝echarts圖表數(shù)據(jù)無法渲染到頁面問題
這篇文章主要介紹了vue3封裝echarts圖表數(shù)據(jù)無法渲染到頁面問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09Vue如何使用Element-ui表單發(fā)送數(shù)據(jù)與多張圖片到后端詳解
在做項目的時候遇到一個問題,前端需要上傳表單到后端,表單數(shù)據(jù)包括文本內(nèi)容和圖片,這篇文章主要給大家介紹了關(guān)于Vue如何使用Element-ui表單發(fā)送數(shù)據(jù)與多張圖片到后端的相關(guān)資料,需要的朋友可以參考下2022-04-04Vue項目使用Websocket大文件FileReader()切片上傳實例
這篇文章主要介紹了Vue項目使用Websocket大文件FileReader()切片上傳實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10vue中的數(shù)據(jù)格式化filters、formatter方式
這篇文章主要介紹了vue中的數(shù)據(jù)格式化filters、formatter方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07