HTML5 FormData 對象的使用

FormData對象用以將數(shù)據(jù)編譯成鍵值對,以便用XMLHttpRequest來發(fā)送數(shù)據(jù)。其主要用于發(fā)送表單數(shù)據(jù),但亦可用于發(fā)送帶鍵數(shù)據(jù)(keyed data),而獨立于表單使用。

你可以自己創(chuàng)建一個FormData對象,然后調用它的append()方法來添加字段,像這樣:

var formData = new FormData();

formData.append("username", "Groucho");
formData.append("accountnum", 123456); //數(shù)字123456會被立即轉換成字符串 "123456"

// HTML 文件類型input,由用戶選擇
formData.append("userfile", fileInputElement.files[0]);

var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);

通過HTML表單創(chuàng)建FormData對象

想要構造一個包含F(xiàn)orm表單數(shù)據(jù)的FormData對象,需要在創(chuàng)建FormData對象時指定表單的元素。

示例:

var formElement = document.querySelector("form");

var request = new XMLHttpRequest();

request.open("POST", "submitform.php");

request.send(new FormData(formElement));

你還可以在創(chuàng)建一個包含F(xiàn)orm表單數(shù)據(jù)的FormData對象之后和發(fā)送請求之前,附加額外的數(shù)據(jù)到FormData對象里,像這樣:

var formElement = document.querySelector("form");

var formData = new FormData(formElement);

var request = new XMLHttpRequest();

request.open("POST", "index.php");

formData.append("Id", 10);

request.send(formData);

上傳進度條

XMLHttpRequest第二版還定義了一個progress事件,可以用來制作進度條。

xhr.upload.onprogress = function (event) {

    if (event.lengthComputable) {

      var complete = (event.loaded / event.total * 100 | 0);

      console.log(complete)

    }

};

拖放上傳

最后,利用HTML5的拖放功能,實現(xiàn)拖放上傳。
先在頁面中放置一個容器,用來接收拖放的文件。

html

<div id="holder"></div>

css

#holder {
  border: 10px dashed #ccc;
  width: 300px;
  min-height: 300px;
  margin: 20px auto;
}

#holder.hover {
  border: 10px dashed #0c0;
}

js

var holder = document.getElementById('holder');

holder.ondragover = function () { this.className = 'hover'; return false; };

holder.ondragleave = function () { this.className = ''; return false; };

holder.ondrop = function (event) {

  event.preventDefault();

  this.className = '';

  var files = event.dataTransfer.files;

  // 開始上傳文件

};

無跳轉上傳文件,還可以借助iframe實現(xiàn),jQuery有一個form插件便是使用的這種方式,如果想追求更好的兼容性的話,可以一試,加油!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 本文詳細介紹了 XMLHttpRequest 相關知識,涉及內容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker閱讀 14,013評論 2 18
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,239評論 3 119
  • 電跨:張楠 董曉 陳影影 魏福凈 李蓉 于靜 吳子珊 武子敬 錢麗瑩 蘇朱玉 李文靜 王愛民 冀艷磊 電運:黃昭華...
    唯杰不愛閱讀 141評論 0 0
  • 我在南京上大二,家在新疆。 從每次放假對于時間或是銀行卡上的數(shù)字都是一次不大不小的減損,有句話可以很好的概括這個抉...
    圍陳閱讀 607評論 0 0
  • 還是無無無閱讀 112評論 0 0

友情鏈接更多精彩內容