最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue項(xiàng)目中form?data形式傳參方式

 更新時(shí)間:2022年06月02日 09:39:08   作者:帥_帥  
這篇文章主要介紹了vue項(xiàng)目中form?data形式傳參方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue中form data形式傳參

vue項(xiàng)目中form data形式傳參,需要在headers中添加如下代碼

 headers: {
             'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
         }

接口請(qǐng)求如下:

export function subFaq (params) {
    return request({
        url: `/jxxx/pub/iface/speech/`,
        method: 'PUT',
        data:qs.stringify(params),
         headers: {
             'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
         }
    })
}

如下圖,在Form Data的中形式下,需要使用qs.stringify(params) ,params是一個(gè)對(duì)象

如下圖,在Form Data的中形式下,直接傳的是對(duì)象

vue文件提交 FormData方式

做Vue項(xiàng)目的時(shí)候, 提交數(shù)據(jù)基本上都是用Axios, 之前做過(guò)的表單方面的提交,一直沒(méi)有空隙進(jìn)行總結(jié),今天得空進(jìn)行一下復(fù)習(xí)和總結(jié):Vue中使用Axios處理包含上傳文件的表單提交

可能出現(xiàn)的問(wèn)題:

常見(jiàn)的問(wèn)題
1、上傳文件應(yīng)該以什么方式提交, 比如后臺(tái)是multipart/form-data, 而習(xí)慣性以json對(duì)象發(fā)送數(shù)據(jù)(實(shí)際上大量插件對(duì)數(shù)據(jù)對(duì)象也封裝了方法, 所以容易忽略)
2、上傳文件提交的格式, 以為將對(duì)象改成數(shù)組就太天真了
3、語(yǔ)法錯(cuò)誤. 比如:>> :on-change=“自定義事件名” 寫(xiě)成>> @on-change=""

前驅(qū)知識(shí)

FormDate

FormData 接口提供了一種表示表單數(shù)據(jù)的鍵值對(duì) key/value 的構(gòu)造方式,并且可以輕松的將數(shù)據(jù)通過(guò)XMLHttpRequest.send() 方法發(fā)送出去,本接口和此方法都相當(dāng)簡(jiǎn)單直接。如果送出時(shí)的編碼類(lèi)型被設(shè)為 “multipart/form-data”,它會(huì)使用和表單一樣的格式。

每個(gè)FormData對(duì)象都有一個(gè)相關(guān)的entry。它最初是一個(gè)空列表。entry 由name和value組成。

英文文獻(xiàn):https://xhr.spec.whatwg.org/#interface-formdata

FormData()使用的時(shí)候要?jiǎng)?chuàng)建一個(gè)新的 FormData 對(duì)象。

let FormData = new FormData();

方法

FormData.append(name, value)`

向 FormData 對(duì)象中添加新的屬性值,F(xiàn)ormData 對(duì)應(yīng)的屬性值存在也不會(huì)覆蓋原值,而是新增一個(gè)值,如果屬性不存在則新增一項(xiàng)屬性值。

append(name, value) 和 append(name, blobValue, filename)

請(qǐng)注意參數(shù)name、value和blobValue存在的原因是由于用于編寫(xiě)的編輯軟件的限制XMLHttpRequest標(biāo)準(zhǔn)。

FormData.delete(name)
  • delete (name)方法步驟是從這個(gè)條目列表中刪除名稱(chēng)為name的所有條目。
  • FormData.entries()返回一個(gè)包含所有鍵值對(duì)的iterator對(duì)象。
  • FormData.get(name)返回在 FormData 對(duì)象中與給定鍵關(guān)聯(lián)的第一個(gè)值。

如果在這個(gè)條目列表中沒(méi)有名稱(chēng)為name的條目,則返回null。

返回此條目列表中名稱(chēng)為name的第一個(gè)條目的值。

  • FormData.getAll(name)返回一個(gè)包含 FormData 對(duì)象中與給定鍵關(guān)聯(lián)的所有值的數(shù)組。

如果在這個(gè)條目列表中沒(méi)有名稱(chēng)為name的條目,則返回空列表

按順序從這個(gè)條目列表中返回名稱(chēng)為name的所有條目的值

  • FormData.has(name)返回一個(gè)布爾值表明 FormData 對(duì)象是否包含某些鍵。

如果在條目列表中有一個(gè)名為name的條目,則has (name)方法步驟將返回true;否則false。

  • FormData.keys()返回一個(gè)包含所有鍵的iterator對(duì)象。
  • FormData.set(name, value)給 FormData 設(shè)置屬性值,如果FormData 對(duì)應(yīng)的屬性值存在則覆蓋原值,否則新增一項(xiàng)屬性值。

set (name, value)和set (name, blobValue, filename)方法步驟如下:

1.給予的value要有value值;否則blobValue。

2.如果使用name、blobValue和filename,則將entry設(shè)為創(chuàng)建條目的結(jié)果。

3.如果在這個(gè)條目列表中有名稱(chēng)為name的條目,那么用entry替換第一個(gè)這樣的條目,并刪除其他條目

4.否則,將條目添加到this的條目列表中。

  • FormData.values()返回一個(gè)包含所有值的iterator對(duì)象。

FormData的使用

axios 傳參時(shí)要注意的

 
//重點(diǎn)在*   
//重點(diǎn)在*   
//重點(diǎn)在*   
//重點(diǎn)在*   
let file = new FormData();//*
  for(let key in data){//*
    file.append(key,data[key]);//*
  };
 axios({
    method:"post",
    url:baseUrl +"/api/cateadd",
    data:file,//*
  }).then(res=>{
     //請(qǐng)求成功返回的數(shù)據(jù)在這進(jìn)行操作
     
 }).catch(err=>{
    //請(qǐng)求失敗返回的數(shù)據(jù)在這 
     
 });

URL

URL.createObjectURL(file)

通過(guò)URL.createObjectURL(file)可以獲取當(dāng)前文件的一個(gè)內(nèi)存URL,

createObjectURL是同步執(zhí)行的

createObjectURL返回一段帶hash的url,并且一直存儲(chǔ)在內(nèi)存中,直到document觸發(fā)了unload事件(例如:document close)或者執(zhí)行revokeObjectURL來(lái)釋放。

實(shí)操

下面使用兩種方式進(jìn)行講解文件如何提交:

1.使用element-ui

使用element-ui的方便之處就是不用再費(fèi)勁自己寫(xiě)css樣式,有包裝好的組件直接引入即可,在這不講怎么使用element-UI的使用,感興趣的自己進(jìn)官網(wǎng)進(jìn)行查看(官網(wǎng):https://element.faas.ele.me/#/zh-CN

使用 element-ui 中的 Upload 組件,

代碼引入以后查看upload組件對(duì)應(yīng)的方法屬性,里面有兩個(gè)方法:on-success和on-change兩個(gè)鉤子函數(shù),

鉤子函數(shù)說(shuō)明類(lèi)型
on-success文件上傳成功時(shí)的鉤子function(response, file, fileList)response是服務(wù)器返回的響應(yīng)file一個(gè)文件fileList存放多個(gè)文件的數(shù)組
on-change文件狀態(tài)改變時(shí)的鉤子,添加文件、上傳成功和上傳失敗時(shí)都會(huì)被調(diào)用function(file, fileList)file一個(gè)文件fileList存放多個(gè)文件的數(shù)組

element-UI將返回的file對(duì)象封裝了一下, 首先我們要拿到真正的文件對(duì)象, 使用的時(shí)候一定要在提交數(shù)據(jù)之前看看數(shù)據(jù)到底在哪里:

  • 真正的File對(duì)象是fileList數(shù)組中某個(gè)元素的raw屬性!
  • 真正的File對(duì)象是fileList數(shù)組中某個(gè)元素的raw屬性!
  • 真正的File對(duì)象是fileList數(shù)組中某個(gè)元素的raw屬性!
  • 真正的File對(duì)象是fileList數(shù)組中某個(gè)元素的raw屬性!

重要的事多說(shuō)幾遍?。。。?/p>

在這我選擇使用on-change,因?yàn)閑lement-UI中提供了一個(gè)http-request事件來(lái)覆蓋默認(rèn)的action, 這樣很好的避免了一些異常,on-success雖然通過(guò)了驗(yàn)證, 但是在生產(chǎn)環(huán)境中由于action地址空所以默認(rèn)請(qǐng)求當(dāng)前地址, 出現(xiàn)了404。

<template>
? ? <el-upload
? ? ? ? class="avatar-uploader"
? ? ? ? action="#"
? ? ? ? :show-file-list="false"
? ? ? ? :on-change="changeImg"http:// changeImg事件名是自定義的
? ? ? ? >
? ? ? ? <img v-if="imageUrl" :src="imageUrl" class="avatar" >
? ? ? ? <i v-else class="el-icon-plus avatar-uploader-icon"></i>
? ? </el-upload>
</template>
<script>
? ? ? //改變圖片時(shí),獲取圖片路徑及信息,e 指的是提交上來(lái)的文件
? ? ? ? changeImg(e){
? ? ? ? ? // 1.處理文件大小
? ? ? ? ? if(e.size > 2*1024*1024){
? ? ? ? ? ? alert('文件大小不能超過(guò)2M')
? ? ? ? ? ? return
? ? ? ? ? }
? ? ? ? ? // 2.處理文件后綴
? ? ? ? ? var ext = ['.jpg','.png','.jpeg','.gif'];
? ? ? ? ? var extName = e.name.slice(e.name.lastIndexOf('.'));
? ? ? ? ? if(!ext.some(item=>item==extName)){
? ? ? ? ? ? alert('上傳文件格式不正確')
? ? ? ? ? ? return
? ? ? ? ? }
? ? ? ? ? // 上傳顯示的文件
? ? ? ? ? // 將文件生成url地址,并顯示在頁(yè)面中
? ? ? ? ? this.imageUrl = URL.createObjectURL(e.raw)
? ? ? ? ? // 將文件存放到form.img中
? ? ? ? ? this.form.img = e.raw;//真正的File對(duì)象是fileList數(shù)組中某個(gè)元素的raw屬性!
? ? ? ? ? ??
? ? ? ? },
</script>

2.使用原始的方法

自己寫(xiě)好樣式:

<template>
?? ?<!-- 自定義文件上傳 -->
? ? <div class="img-box">
? ? ? ? <h3>+</h3>
? ? ? ? <img v-if="imageUrl" :src="imageUrl" alt="">
? ? ? ? <input type="file" @change="changeImg1">
? ? </div>
</template>
<script>
? changeImg1(e){
? ? ? ?// 取出上傳的文件
? ? ? let file = e.target.files[0];
? ? ? // 1.確認(rèn)文件大小
? ? ? if (file.size > 2 * 1024 * 1024) {
? ? ? ? warningAlert("文件大小不能大于2M");
? ? ? ? return;
? ? ? }
? ? ? // 2.確認(rèn)文件格式
? ? ? let arr = [".jpg", ".jpng", ".png", ".jpeg"];
? ? ? let lastName = file.name.slice(file.name.lastIndexOf("."));
? ? ? if (!arr.some(item => item == lastName)) {
? ? ? ? warningAlert("文件格式錯(cuò)誤");
? ? ? ? return;
? ? ? }
? ? ? // 3.獲取文件的存儲(chǔ)位置用于渲染頁(yè)面
? ? ? this.imgUrl = URL.createObjectURL(file);
? ? ? // console.log(this.imgUrl);
? ? ? // 4.將文件賦值給要提交的變量
? ? ? this.form.img = file;
? ? },
</script>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Vue3實(shí)現(xiàn)列表虛擬滾動(dòng)的詳細(xì)步驟

    使用Vue3實(shí)現(xiàn)列表虛擬滾動(dòng)的詳細(xì)步驟

    在前端開(kāi)發(fā)中,列表的虛擬滾動(dòng)是一種常見(jiàn)的優(yōu)化手段,可以大大提升頁(yè)面性能,在Vue3中,我們可以通過(guò)一些技巧來(lái)實(shí)現(xiàn)列表的虛擬滾動(dòng),本文將介紹如何使用Vue3實(shí)現(xiàn)列表的虛擬滾動(dòng),讓你的頁(yè)面加載更快、更流暢,需要的朋友可以參考下
    2024-09-09
  • vue+mockjs模擬數(shù)據(jù)實(shí)現(xiàn)前后端分離開(kāi)發(fā)的實(shí)例代碼

    vue+mockjs模擬數(shù)據(jù)實(shí)現(xiàn)前后端分離開(kāi)發(fā)的實(shí)例代碼

    本篇文章主要介紹了vue+mockjs模擬數(shù)據(jù)實(shí)現(xiàn)前后端分離開(kāi)發(fā)的實(shí)例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-08-08
  • 帶你理解vue中的v-bind

    帶你理解vue中的v-bind

    如果你寫(xiě)過(guò)vue,對(duì)v-bind這個(gè)指令一定不陌生。 下面小編將從源碼層面去帶大家剖析一下v-bind背后的原理,需要的小伙伴可以參考下面章的具體內(nèi)容
    2021-09-09
  • Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)

    Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn)

    本文主要介紹了Element中select多數(shù)據(jù)加載優(yōu)化的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 關(guān)于導(dǎo)入、配置Vuetify遇到的幾個(gè)問(wèn)題

    關(guān)于導(dǎo)入、配置Vuetify遇到的幾個(gè)問(wèn)題

    這篇文章主要介紹了關(guān)于導(dǎo)入、配置Vuetify遇到的幾個(gè)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue中使用codemirror的實(shí)例詳解

    vue中使用codemirror的實(shí)例詳解

    這篇文章主要介紹了vue中使用codemirror的實(shí)例教程,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2018-11-11
  • Element中Upload組件上傳功能實(shí)現(xiàn)(圖片和文件的默認(rèn)上傳及自定義上傳)

    Element中Upload組件上傳功能實(shí)現(xiàn)(圖片和文件的默認(rèn)上傳及自定義上傳)

    這篇文章主要介紹了Element中Upload組件上傳功能實(shí)現(xiàn)包括圖片和文件的默認(rèn)上傳及自定義上傳,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Vue3的路由傳參方法超全匯總

    Vue3的路由傳參方法超全匯總

    vue路由傳參的使用場(chǎng)景一般都是應(yīng)用在父路由跳轉(zhuǎn)到子路由時(shí),攜帶參數(shù)跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Vue3路由傳參方法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • vue-router history模式服務(wù)器端配置過(guò)程記錄

    vue-router history模式服務(wù)器端配置過(guò)程記錄

    vue路由有hash和history兩種模式,這篇文章主要給大家介紹了關(guān)于vue-router history模式服務(wù)器端配置的相關(guān)資料,需要的朋友可以參考下
    2021-06-06
  • Vue使用MD5對(duì)前后端進(jìn)行加密的實(shí)現(xiàn)

    Vue使用MD5對(duì)前后端進(jìn)行加密的實(shí)現(xiàn)

    前后端分離的項(xiàng)目,遇到了對(duì)密碼進(jìn)行加密的情況,在前端或者是在后端加密都是可以的,本文主要介紹了Vue使用MD5對(duì)前后端進(jìn)行加密的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04

最新評(píng)論

德保县| 娄底市| 高碑店市| 景泰县| 普格县| 吉木萨尔县| 江安县| 上虞市| 前郭尔| 虞城县| 渭源县| 甘德县| 门头沟区| 婺源县| 榆社县| 开鲁县| 安吉县| 长泰县| 疏勒县| 许昌市| 章丘市| 高雄市| 裕民县| 吉水县| 洪湖市| 东山县| 大厂| 瑞昌市| 绥棱县| 沽源县| 上饶市| 喜德县| 本溪| 穆棱市| 于田县| 运城市| 丰城市| 普安县| 周口市| 宁城县| 进贤县|