Vue 使用formData方式向后臺發(fā)送數(shù)據(jù)的實現(xiàn)
很多時候在使用form向后臺發(fā)送數(shù)據(jù)的時候,并不需要使用到表單組件。
例如時間戳、ip等,這個時候除了ajax之外,還可以使用HTML5的一個全新方法FormData;在input[type = file]的文件類型中,很多時候想要把一張圖片或者是使用canvas繪制好的圖像傳送到后臺時,無法賦值給file文件,只能轉(zhuǎn)換為base64類型傳送到后臺,然后由后臺轉(zhuǎn)換為圖片再進(jìn)行服務(wù)器存儲;此過程較為復(fù)雜;
使用formdata,只需創(chuàng)建新的formdata對象,將要發(fā)送的數(shù)據(jù)添加進(jìn)去,后臺即可接收;數(shù)據(jù)以及文件對象皆可;
1. 基本使用方式
template
<input class="file" name="file" type="file" accept="image/png,image/gif,image/jpeg" @change="update"/>
JavaScript
update (e) { let file = e.target.files[0] // console.log(file) let param = new FormData() // 創(chuàng)建form對象 param.append('file', file, file.name) // 通過append向form對象添加數(shù)據(jù) param.append('id', this.$store.state.userId) // 添加form表單中其他數(shù)據(jù) // withCredentials: true 使得后臺可以接收表單數(shù)據(jù) 跨域請求 const instance = axios.create({ withCredentials: true }) // url為后臺接口 instance.post('url', param) .then(this.succ) // 成功返回信息 調(diào)用函數(shù) 函數(shù)需自己定義,此處后面省略 .catch(this.serverError) // 服務(wù)器錯誤 調(diào)用對應(yīng)函數(shù) 函數(shù)需自己定義,此處后面省略 }
2. 美化 input file 按鈕 (拓展)
思路:
- 簡單粗暴地隱藏:opacity: 0;
- 在 <input class="file"> 元素節(jié)點的位置上創(chuàng)建一個好看的元素節(jié)點,比如img
- 將 <input class="file"> 元素的z軸變高,使得其覆蓋<img/> :z-index: 5;
- 因為 <input class="file"> 是透明的,那么我們就只看見它同xy上的好看的<img />
- 點擊這個好看的<img /> 其實是點擊了它上層的表單
以上思路可以實現(xiàn)點擊用戶頭像,通過表單上傳更換頭像,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue開發(fā)中數(shù)據(jù)更新但視圖不刷新的解決方法
在開發(fā)中我們處理數(shù)據(jù)時會遇到數(shù)據(jù)更新了,但視圖并沒有更新,這種情況往往是數(shù)據(jù)嵌套層數(shù)過多導(dǎo)致的問題,下面這篇文章主要給大家介紹了關(guān)于vue開發(fā)中數(shù)據(jù)更新但視圖不刷新的解決方法,需要的朋友可以參考下2022-11-11el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問題
這篇文章主要介紹了el-select 數(shù)據(jù)回顯,只顯示value不顯示lable問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-09-09