国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > WEB開發(fā) > 正文

FormData的詳細(xì)介紹及使用

2024-04-27 15:06:58
字體:
供稿:網(wǎng)友

FormData的詳細(xì)介紹及使用請(qǐng)點(diǎn)擊此處,那里對(duì)FormData的方法和事件已經(jīng)表述的非常清楚,這里就不再浪費(fèi)時(shí)間在介紹一遍了。本文主要針對(duì)FormData對(duì)象的使用以及異步文件上傳進(jìn)行詳細(xì)的說明。

FormData對(duì)象可以讓我們組織一個(gè)使用xmlHttPRequest對(duì)象發(fā)送的鍵值對(duì)的集合。它主要用于發(fā)送表單數(shù)據(jù),但是可以獨(dú)立于使用表單傳輸?shù)臄?shù)據(jù)。

一、從頭開始創(chuàng)建一個(gè)FormData對(duì)象

你可以創(chuàng)建一個(gè)你自己的FormData對(duì)象,然后通過append() 方法向?qū)ο笾刑砑渔I值對(duì),就像下面這樣:

var formData = new FormData();formData.append("username", "Groucho");formData.append("accountnum", 123456); // number 123456 is immediately converted to a string "123456"http:// HTML file input, chosen by userformData.append("userfile", fileInputElement.files[0]);// javaScript file-like objectvar content = '<a id="a"><b id="b">hey!</b></a>'; // 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", "http://foo.com/submitform.php");request.send(formData);

注意:字段”userfile” 和 “webmasterfile” 都包含文件(file)。被分配到字段”accountnum”上的數(shù)字直接被FormData.append()方法轉(zhuǎn)換成了字符串(字段的值(value)可能是一個(gè)Blob, File, 或一個(gè)string:如果值既不是Blob也不是File,則值會(huì)被轉(zhuǎn)換成一個(gè)string)。

這個(gè)例子創(chuàng)建了一個(gè)FormData實(shí)例,其中包含字段”username”, “accountnum”, “userfile” 和 “webmasterfile”,然后使用XMLHttpRequest對(duì)象的send()方法去發(fā)送表單數(shù)據(jù)。字段”webmasterfile”是一個(gè)Blob。一個(gè)Blob對(duì)象代表一個(gè)文件對(duì)象的原始數(shù)據(jù)。但是Blob代表的數(shù)據(jù)不必須是Javascript原生格式的數(shù)據(jù)。文件接口是基于Blob,繼承Blob功能和擴(kuò)大它對(duì)用戶文件系統(tǒng)的支持。為了構(gòu)建一個(gè)Blob可以調(diào)用Blob()構(gòu)造函數(shù)。

二、從一個(gè)HTML表單獲得一個(gè)FormData對(duì)象

為了獲得一個(gè)包含已存在表單數(shù)據(jù)的FormData對(duì)象,在創(chuàng)建FormData對(duì)象的時(shí)候需要指定表單元素。

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對(duì)象之后增加另外的數(shù)據(jù),就像下面這樣:

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);

這樣你可以在發(fā)送之前增加額外的信息,不一定是用戶編輯的。

三、使用FormData對(duì)象發(fā)送文件

你可以使用FormData發(fā)送文件。簡單的<form>中在包含一個(gè)<input>元素就可以:

<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><div></div>

然后你可以使用下面的代碼去發(fā)送:

var form = document.forms.namedItem("fileinfo");form.addEventListener('submit', function(ev) { var oOutput = document.querySelector("div"), 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);

你也可以直接向FormData對(duì)象中添加File或Blob,就像下面這樣:

data.append("myfile", myBlob, "filename.txt");

當(dāng)使用append() 方法的時(shí)候,可能會(huì)使用到第三個(gè)參數(shù)去發(fā)送文件名稱(通過Content-Disposition頭發(fā)送到服務(wù)器)。如果沒有指定第三個(gè)參數(shù)或這個(gè)參數(shù)不被支持的話,第三個(gè)參數(shù)默認(rèn)是”blob”。

如果你設(shè)置好正確的options,你也可以和jQuery配合起來使用:

var fd = new FormData(document.querySelector("form"));fd.append("CustomField", "This is some extra data");$.Ajax({ url: "stash.php", type: "POST", data: fd, processData: false, // tell jQuery not to process the data contentType: false // tell jQuery not to set contentType});
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 广汉市| 永济市| 桐庐县| 尉犁县| 吉林市| 固始县| 平阴县| 新巴尔虎左旗| 闵行区| 怀安县| 家居| 公主岭市| 西吉县| 潢川县| 剑河县| 革吉县| 沿河| 四平市| 麻栗坡县| 武功县| 含山县| 德江县| 四会市| 衢州市| 鹤壁市| 凌源市| 腾冲县| 旌德县| 兴山县| 尉犁县| 肥西县| 永年县| 宜良县| 独山县| 大姚县| 封丘县| 襄汾县| 体育| 佛冈县| 海盐县| 额济纳旗|