摘要:分析一下請(qǐng)求信息,發(fā)現(xiàn)這種提交方式與表單提交是一樣的,比如提交兼容性由圖可見,在移動(dòng)端,對(duì)低版本的設(shè)備支持不夠友好。我們知道,在請(qǐng)求中,函數(shù)會(huì)自動(dòng)生成請(qǐng)求頭和請(qǐng)求主體。在瀏覽器不支持的情況下,我們可以通過拼接請(qǐng)求,來達(dá)到目的。
介紹
先看看 MDN 對(duì)FormData的介紹:
XMLHttpRequest Level2添加了一個(gè)新的接口FormData. 利用FormData對(duì)象,我們可以通過JavaScript用一些鍵值對(duì)來模擬一系列表單控件,我們還可以使用XMLHttpRequest的send()方法來異步的提交這個(gè)"表單".比起普通的ajax,使用FormData的最大優(yōu)點(diǎn)就是我們可以異步上傳一個(gè)二進(jìn)制文件.
特點(diǎn)就是,增加了ajax對(duì)二進(jìn)制文件上傳的支持。比如:
var formData = new FormData(); formData.append("username", "sam"); // HTML file input, chosen by user formData.append("userfile", fileInputElement.files[0]); // JavaScript file-like object var content = "hey!"; // the body of the new file... var blob = new Blob([content], { type: "text/xml"}); formData.append("webmasterfile", blob); var request = new XMLHttpRequest(); request.open("POST", url); request.send(formData);
這個(gè)例子既有File,還有Blob 類型文件,利用FormData 能輕松的進(jìn)行異步上傳。
請(qǐng)求頭部可以看到 Content-Type 為:
multipart/form-data; boundary=----WebKitFormBoundary2KZkAN7R3gSDjBJz
圖中沒有看到 file 的二進(jìn)制文件
請(qǐng)求主體每個(gè)參數(shù)包括:
第一行,“分界線”,圖中chrome的分界線是:“——WebKitFormBoundary”加16位隨機(jī)Base64位編碼的字符串作為分隔邊界
第二行,內(nèi)容配置,指明form-data,和name鍵名稱
第三行,指明content-type
第三行或第四行,空行
注意,整個(gè)body結(jié)束最后,多了一個(gè)分界線。
分析一下請(qǐng)求信息,發(fā)現(xiàn)這種提交方式與form表單提交是一樣的,比如:
由圖可見,FormData 在移動(dòng)端,對(duì)低版本的 Android 設(shè)備支持不夠友好。
我們知道,在ajax請(qǐng)求中,send函數(shù)會(huì)自動(dòng)生成請(qǐng)求頭和請(qǐng)求主體。所以,send(formData)瀏覽器會(huì)自動(dòng)生成上圖中的請(qǐng)求。在瀏覽器不支持FormData的情況下,我們可以通過拼接multipart/form-data請(qǐng)求,來達(dá)到目的。
動(dòng)手實(shí)現(xiàn)了一個(gè):https://github.com/henryluki/...
參考FormData
The Multipart Content-Type
XMLHttpRequest Standard
Returning Values from Forms: multipart/form-data
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81194.html
摘要:如果是傳入三個(gè)參數(shù)的方式,那么該值將是一個(gè)布爾值,文件,或者一個(gè),如果不是,將被轉(zhuǎn)成一個(gè)字符串可選傳給服務(wù)器的文件名稱一個(gè)。 系列文章 關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(零)關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(一) ----- XMLHttpRequest關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(二) ----- File關(guān)于前端上傳文件全面基礎(chǔ)掃盲貼(三) ----- FormData關(guān)于前端上傳文...
摘要:需求當(dāng)上傳的文件相對(duì)較大時(shí),用戶可能需要等待較長(zhǎng)的時(shí)間,這個(gè)時(shí)候前端如果沒有任何提示的話,體驗(yàn)不是很好,如果有上傳進(jìn)度提示,就會(huì)好很多。 需求 當(dāng)上傳的文件相對(duì)較大時(shí),用戶可能需要等待較長(zhǎng)的時(shí)間,這個(gè)時(shí)候前端如果沒有任何提示的話,體驗(yàn)不是很好,如果有上傳進(jìn)度提示,就會(huì)好很多。而要在上傳過程實(shí)時(shí)顯示上傳進(jìn)度,則需要已上傳的大小和文件總大小。 前提 請(qǐng)求是異步的。因?yàn)橐獙?shí)時(shí)獲取到上傳的進(jìn)度...
摘要:關(guān)于對(duì)象數(shù)組傳值總結(jié)代碼提示已經(jīng)存在于實(shí)體類中。提交數(shù)據(jù)數(shù)據(jù)獲取判斷控件類型以對(duì)象的形式向后臺(tái)傳數(shù)據(jù)在實(shí)體類中創(chuàng)建集合在集合中添加實(shí)例在中調(diào)用數(shù)據(jù)類型 關(guān)于 FormData 對(duì)象數(shù)組傳值總結(jié) jQuery Java Spring MVC jQuery 代碼 提示: Ncr 已經(jīng)存在于實(shí)體類中。 // 提交數(shù)據(jù) $(#submit-btn).click(func...
摘要:關(guān)于對(duì)象數(shù)組傳值總結(jié)代碼提示已經(jīng)存在于實(shí)體類中。提交數(shù)據(jù)數(shù)據(jù)獲取判斷控件類型以對(duì)象的形式向后臺(tái)傳數(shù)據(jù)在實(shí)體類中創(chuàng)建集合在集合中添加實(shí)例在中調(diào)用數(shù)據(jù)類型 關(guān)于 FormData 對(duì)象數(shù)組傳值總結(jié) jQuery Java Spring MVC jQuery 代碼 提示: Ncr 已經(jīng)存在于實(shí)體類中。 // 提交數(shù)據(jù) $(#submit-btn).click(func...
閱讀 3578·2021-08-02 13:41
閱讀 2450·2019-08-30 15:56
閱讀 1527·2019-08-30 11:17
閱讀 1186·2019-08-29 15:18
閱讀 591·2019-08-29 11:10
閱讀 2681·2019-08-26 13:52
閱讀 520·2019-08-26 13:22
閱讀 2962·2019-08-23 15:41