HTML5筆記——formData

?

注:formData中的數據在控制臺上的console里面是打印不出來的,只能在控制臺的network里面查看到具體的發送數據和發送選項

文章出處:夢想天空

?

XMLHttpRequest Level 2 添加了一個新的接口——FormData利用 FormData?對象,我們可以通過?JavaScript?用一些鍵值對來模擬一系列表單控件,我們還可以使用 XMLHttpRequest 的 send()?方法來異步的提交表單。與普通的 Ajax 相比,使用 FormData?的最大優點就是我們可以異步上傳二進制文件。

您可能感興趣的相關文章
  • 10大流行 Metro UI Bootstrap 主題和模板
  • 精選12款優秀 jQuery Ajax 分頁插件和教程
  • 10大流行的 Metro UI 風格 Bootstrap 主題
  • 8款效果精美的 jQuery 加載動畫和進度條插件
  • 推薦35款精致的 CSS3 和 HTML5 網頁模板

??

創建一個FormData對象

  你可以先創建一個空的?FormData?對象,然后使用?append()?方法向該對象里添加字段,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var?oMyForm =?new?FormData();
oMyForm.append("username",?"Groucho");
oMyForm.append("accountnum", 123456);?// 數字123456被立即轉換成字符串"123456"
// fileInputElement中已經包含了用戶所選擇的文件
oMyForm.append("userfile", fileInputElement.files[0]);
var?oFileBody =?"<a id="a"><b id="b">hey!</b></a>";?// Blob對象包含的文件內容
var?oBlob =?new?Blob([oFileBody], { type:?"text/xml"});
oMyForm.append("webmasterfile", oBlob);
var?oReq =?new?XMLHttpRequest();
oReq.open("POST",?"http://foo.com/submitform.php");
oReq.send(oMyForm);

  注:字段 "userfile" 和 "webmasterfile" 的值都包含了一個文件。通過?FormData.append()?方法賦給字段 "accountnum" 的數字被自動轉換為字符(字段的值可以是一個?Blob?對象,File對象或者字符串,剩下其他類型的值都會被自動轉換成字符串)。

  在該例子中,我們創建了一個名為 oMyForm 的 FormData?對象,該對象中包含了名為"username","accountnum","userfile" 以及 "webmasterfile" 的字段名,然后使用XMLHttpRequest的?send()?方法把這些數據發送了出去。"webmasterfile" 字段的值不是一個字符串,還是一個?Blob?對象。

使用HTML表單來初始化一個FormData對象

  可以用一個已有的 form?元素來初始化?FormData 對象,只需要把這個?form?元素作為參數傳入?FormData?構造函數即可:

1
var?newFormData =?new?FormData(someFormElement);

  例如:

1
2
3
4
var?formElement = document.getElementById("myFormElement");
var?oReq =?new?XMLHttpRequest();
oReq.open("POST",?"submitform.php");
oReq.send(new?FormData(formElement));

  你還可以在已有表單數據的基礎上,繼續添加新的鍵值對,如下:

1
2
3
4
var?formElement = document.getElementById("myFormElement");
formData =?new?FormData(formElement);
formData.append("serialnumber", serialNumber++);
oReq.send(formData);

  你可以通過這種方式添加一些不想讓用戶編輯的固定字段,然后再發送.

使用FormData對象發送文件

  你還可以使用?FormData?來發送二進制文件.首先在 HTML 中要有一個包含了文件輸入框的 form 元素:

1
2
3
4
5
6
7
8
9
10
<form enctype="multipart/form-data"?method="post"?name="fileinfo">
??<label>Your email address:</label>
??<input type="email"?autocomplete="on"?autofocus name="userid"?placeholder="email"?required size="32"?maxlength="64"?/><br />
??<label>Custom file label:</label>
??<input type="text"?name="filelabel"?size="12"?maxlength="32"?/><br />
??<label>File to stash:</label>
??<input type="file"?name="file"?required />
</form>
<div id="output"></div>
<a href="javascript:sendForm()">Stash the file!</a>

  然后你就可以使用下面的代碼來異步的上傳用戶所選擇的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function?sendForm() {
??var?oOutput = document.getElementById("output");
??var?oData =?new?FormData(document.forms.namedItem("fileinfo"));
??oData.append("CustomField",?"This is some extra data");
??var?oReq =?new?XMLHttpRequest();
??oReq.open("POST",?"stash.php",?true);
??oReq.onload =?function(oEvent) {
????if?(oReq.status == 200) {
??????oOutput.innerHTML =?"Uploaded!";
????}?else?{
??????oOutput.innerHTML =?"Error "?+ oReq.status +?" occurred uploading your file.<br \/>";
????}
??};
??oReq.send(oData);
}

  你還可以不借助 HTML 表單,直接向?FormData?對象中添加一個?File?對象或者一個?Blob?對象:

1
data.append("myfile", myBlob);

  如果 FormData 對象中的某個字段值是一個?Blob?對象,則在發送 HTTP 請求時,代表該?Blob?對象所包含文件的文件名的 "Content-Disposition" 請求頭的值在不同的瀏覽器下有所不同,Firefox使用了固定的字符串"blob",而 Chrome 使用了一個隨機字符串。

  你還可以使用 jQuery 來發送?FormData,但必須要正確的設置相關選項:

1
2
3
4
5
6
7
8
9
var?fd =?new?FormData(document.getElementById("fileinfo"));
fd.append("CustomField",?"This is some extra data");
$.ajax({
??url:?"stash.php",
??type:?"POST",
??data: fd,
??processData:?false,??// 告訴jQuery不要去處理發送的數據
??contentType:?false???// 告訴jQuery不要去設置Content-Type請求頭
});

瀏覽器兼容性

  桌面端:

FeatureChromeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support7+4.0 (2.0)10+12+5+
支持filename參數(Yes)22.0 (22.0)???

  移動端:?

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic support3.0?4.0 (2.0)?

12+

?
支持filename參數??22.0 (22.0)???

參考文獻:

  • MDN:使用?XMLHttpRequest
  • MDN:XMLHttpRequest FormData
  • XMLHttpRequest 2 新技巧
  • MDN:使用 FormData 對象
  • W3C:XMLHttpRequest Level 2

轉載于:https://www.cnblogs.com/MonaSong/p/5955950.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/373702.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/373702.shtml
英文地址,請注明出處:http://en.pswp.cn/news/373702.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 學習隨記——==和===及常見元素的真假值

“” 和 “” 符合的使用 <script>/*** 表示可以經過自動轉換&#xff0c;比較的是數值*///example01if(1 true && false 0 && true 1){console.log(1true);console.log(" 比較的是等號兩邊數據的值是否相等&#xff08;可以經過自動轉換&#…

運維祈求不宕機_[國慶特輯] 程序員應該求誰保佑才能保證不宕機?

一年國慶又到&#xff5e;程序猿、運維工程師、利用假期該結婚的結婚&#xff0c;該回老家的回老家。產品經理、項目經理們也要出國旅游了(好像這次是去東京玩)&#xff0c;并且叮囑一定要安排好值班表。我是個程序員&#xff0c;我也想出國旅游&#xff0c;卻覺得有點兒貴。多…

Oracle Weblogic 11g(10.3.4)的小知識

本周&#xff0c;我將為Weblogic進行許多設置和配置&#xff08;我猜是開發人員&#xff09;。 在過去的4年中&#xff0c;我一直在與Weblogic合作&#xff0c;并且我不得不承認-與Eclipse類似-我已經開始使用它。 我曾經是Netbeans / JBoss開發人員&#xff0c;后來轉向Eclips…

java中HashMap的用法

重點介紹HashMap。首先介紹一下什么是Map。在數組中我們是通過數組下標來對其內容索引的&#xff0c;而在Map中我們通過對象來對對象進行索引&#xff0c;用來索引的對象叫做key&#xff0c;其對應的對象叫做value。在下文中會有例子具體說明。 再來看看HashMap和TreeMap有什么…

關于 MVCC 的基礎

作為第一篇對 MVCC 的學習材料&#xff0c;以下內容翻譯自 Wikipedia。 1. 什么是MVCC 1.1 基礎概念 MVCC&#xff0c;Multi-Version Concurrency Control&#xff0c;多版本并發控制。MVCC 是一種并發控制的方法&#xff0c;一般在數據庫管理系統中&#xff0c;實現對數據庫的…

集成測試CDI 1.0和Spring 3.1中的作用域bean

在這篇博客文章中&#xff0c;我描述了如何在Spring和CDI中使用作用域bean進行集成測試。 一切都用小代碼示例進行說明。 使用范圍進行集成測試并不是特別容易。 想象一下存在于會話范圍內的bean&#xff0c;例如UserCredentials 。 在集成測試中&#xff0c;通常沒有HttpReque…

JavaScript學習隨記——數組一

數組的創建及length屬性 <script type"text/javascript" charset"utf-8">// 數組創建方式一,此種方式寫的時候比較麻煩var arrnew Array();// 數組創建方式二var arr [1,2,3,4,true,str,new Date()];console.log("arr.length&#xff1a;"…

USACO milk4 枚舉答案再檢驗

剛開始寫了一個暴力的dfs超時了&#xff0c; 最后看了下題解說是先枚舉答案再判斷&#xff0c;然后就寫了雙dfs&#xff0c;全部秒殺&#xff0c;代碼如下&#xff1a; /*ID: m1500293LANG: CPROG: milk4 */ #include <cstdio> #include <cstring> #include <al…

微信小程序常見問題集合(長期更新)

最新更新&#xff1a; 新手跳坑系列&#xff1a;推薦閱讀&#xff1a;《二十四》request:fail錯誤&#xff08;含https解決方案&#xff09;&#xff08;真機預覽問題 跳坑指南《七十》如何讓微信小程序服務類目審核通過跳坑六十九&#xff1a;uploadFile:fail Error: unable t…

mysql指令按順序排列_mysql基本語法大全

1.備份數據庫&#xff1a;1.1備份數據庫中的表:mysqldump -u root -p test a b >d:\bank_a.sql//分別備份數據庫test下a和b表1.2備份一個數據庫mysqldump -u root -p test > d:\testbk.sql1.3備份多個數據庫mysqldump -u root -p --databases test mysql > D:\data.sq…

Spring和石英:多作業計劃服務

作業調度對于應用程序來說是如此重要。 尤其是在大型項目中&#xff0c;處理大量工作可能是一個問題。 Spring和Quartz為解決該問題帶來了巨大的好處。 本文介紹了如何通過使用Spring和Quartz輕松地計劃多個作業。 二手技術&#xff1a; JDK 1.6.0_21 春天3.1.1 石英1.8.5 M…

JavaScript學習隨記——數組二

數組indexOf(arg) 和 lastIndexOf(arg)方法使用 <script type"text/javascript" charset"utf-8">/*** indexOf(arg):返回指定參數在數組中的索引位置&#xff08;從前往后查&#xff0c;比較是使用 ‘’&#xff0c;查詢到立即返回索引位置&#xff…

反射的簡單應用

首先有一個類 1 using System;2 using System.Collections.Generic;3 using System.Linq;4 using System.Text;5 using System.Threading.Tasks;6 7 namespace ConsoleApplication18 {9 public class demo 10 { 11 public string name "程序員"; 12…

JavaFX 2.0示例介紹書

我最近完成了有關JavaFX 2.0 SDK新版本的書的編寫&#xff0c;并且已經將它放在您附近的書店&#xff08; Amazon &#xff09;的書架上。 該書將逐步指導您完成JavaFX 2.0的來龍去脈。 當您遇到一章時&#xff0c;將看到一些菜譜&#xff0c;這些菜譜將帶來一個問題&#xff0…

雙縱坐標的繪圖命令_工程師繪圖必備軟件——OriginLab 2019b

點擊右上角關注&#xff0c;盡享后續精品軟件OriginLab 2019b是OriginLab OriginPro 2019版本的加強版&#xff0c;這個軟件對于許多人來講并不陌生&#xff0c;可以說是科學家和工程師的繪圖必備軟件。新的版本也帶來許多改變&#xff0c;軟件擁有多種功能&#xff0c;這個版本…

JavaScript學習隨記——對象

JS中對象基本使用 <script type"application/javascript" charset"utf-8">//Objcet 所有類的基礎類/*** 創建對象方式一*/ // var objnew Objcet();/** 創建對象方式二,注意 {}不可忘記寫* */var obj {};obj.name "什碼情況";obj.age …

[轉]Java_List元素的遍歷和刪除

原文地址:http://blog.csdn.net/insistgogo/article/details/19619645 1、創建一個ArrayList [java] view plainList<Integer> list new ArrayList<Integer>(); 2、List常用的遍歷方法有三種&#xff1a; &#xff08;1&#xff09;下標循環 [java] view plainfo…

分層設計 --java中的幾種包

對于剛接觸包分層的同學&#xff0c;下面簡單介紹一下java中各個層次&#xff1a; Modle 模型層 &#xff1a;存放你的實體類 dao&#xff1a;主要做數據庫的交互工作&#xff0c;具體的增刪改查等方法&#xff0c;操作數據庫的&#xff1b;這里也可以存放查詢所有的信息接口 …

Spring遠程支持和開發RMI服務

Spring遠程支持簡化了啟用遠程服務的開發。 當前&#xff0c;Spring支持以下遠程技術&#xff1a;遠程方法調用&#xff08;RMI&#xff09;&#xff0c;HTTP調用程序&#xff0c;Hessian&#xff0c;Burlap&#xff0c;JAX-RPC&#xff0c;JAX-WS和JMS。 遠程方法調用&#xf…

cesium繪制網格_Cesium學習筆記-工具篇37-風場繪制

這兩天重新接觸到流場&#xff0c;于是研究下&#xff0c;在大牛們的輪子上也算實現了效果&#xff1a;1二維2三維主要參考以下三篇文章&#xff1a;《WebGL風向圖》給出制作風向圖通常步驟&#xff1a;1. 在屏幕上生成一系列隨機粒子位置并繪制粒子。2. 對于每一個粒子&#x…