首頁 > web前端 > js教程 > 主體

JavaScript中FormData 在物件中運用

一个新手
發布: 2017-09-06 13:20:19
原創
1892 人瀏覽過

FormData 物件的使用

在本文章中

  1. 如何建立一個FormData物件

  2. 透過HTML表單創建FormData物件

  3. 使用FormData物件上傳檔案

  4. #透過AJAX提交表單和上傳檔案可以不使用FormData物件

  5. #相關連結


透過FormData物件可以組裝一組用 XMLHttpRequest傳送請求的鍵/值對。它可以更靈活方便的發送表單數據,因為可以獨立於表單使用。如果你把表單的編碼類型設定為multipart/form-data ,則透過FormData傳輸的資料格式和表單透過submit() 方法傳輸的資料格式相同

#如何建立一個FormData物件Edit

你可以自己建立一個FormData對象,然後透過呼叫它的append()方法來新增字段,就像這樣:


var formData = new FormData();

formData.append("username", "Groucho");
formData.append("accountnum", 123456); // 数字 123456 会被立即转换成字符串 "123456"// HTML 文件类型input,由用户选择formData.append("userfile", fileInputElement.files[0]);// JavaScript file-like 对象var content = '<a id="a"><b id="b">hey!</b></a>'; // 新文件的正文...var blob = new Blob([content], { type: "text/xml"});

formData.append("webmasterfile", blob);var request = new XMLHttpRequest();
request.open("POST", "http://foo.com/submitform.php");
request.send(formData);
登入後複製

注意:欄位"userfile" 和"webmasterfile"  都包含一個檔案.欄位"accountnum" 是數字類型,它將被FormData.append()方法轉換成字串型別(FormData 物件的欄位類型可以是 BlobFile, 或string: 如果它的欄位類型不是Blob也不是File,則會被轉換成字串型別。 "accountnum", "userfile" 和 "webmasterfile"四個字段,然後使用XMLHttpRequest

send()方法傳送表單資料。 #類型。功能並將其擴展為支援使用者係統上的檔案。 Edit想要建構一個包含Form表單資料的FormData對象,需要在建立FormData物件時指定表單的元素。 ##你還可以在建立一個包含Form表單資料的FormData物件之後和發送請求之前,附加額外的資料到FormData物件裡,像這樣:

var formData = new FormData(someFormElement);
示例:var formElement = document.querySelector("form");var request = new XMLHttpRequest();
request.open("POST", "submitform.php");
request.send(new FormData(formElement));
登入後複製
這樣你就可以在發送請求之前自由地附加不一定是用戶編輯的字段到表單數據裡使用FormData對像上傳文件Edit

#你也可以使用FormData上傳檔案。使用的時候需要在表單中新增一個檔案類型的input:

var formElement = document.querySelector("form");var formData = new FormData(formElement);var request = new XMLHttpRequest();
request.open("POST", "submitform.php");
formData.append("serialnumber", serialNumber++);
request.send(formData);
登入後複製
然後使用下面的程式碼發送請求:


<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 />
  <input type="submit" value="Stash the file!" /></form><p></p>
登入後複製


注意:

如果FormData物件是透過表單建立的,則表單中指定的請求方式會被應用到方法open()中 。

你也可以直接向FormData物件附加File或Blob類型的文件,如下所示:
var form = document.forms.namedItem("fileinfo");
form.addEventListener('submit', function(ev) {  var oOutput = document.querySelector("p"),
      oData = new FormData(form);

  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 when trying to upload your file.<br \/>";
    }
  };

  oReq.send(oData);
  ev.preventDefault();
}, false);
登入後複製
使用appned()方法時,可以透過第三個可選參數設定發送請求的頭 
Content-Disposition 

指定檔案名稱。如果不指定檔案名稱(或不支援該參數時),將使用名字「blob」。

如果你設定正確的配置項,你也可以透過jQuery來使用FormData物件:


data.append("myfile", myBlob, "filename.txt");
登入後複製


#

以上是JavaScript中FormData 在物件中運用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!