ÐбÑÐµÐºÑ FormData
позволÑÐµÑ ÑоздаÑÑ Ð½Ð°Ð±Ð¾Ñ Ð¿Ð°Ñ ÐºÐ»ÑÑ/знаÑение и пеÑедаÑÑ Ð¸Ñ
, иÑполÑзÑÑ XMLHttpRequest.
ÐбÑÐµÐºÑ FormData
пÑедназнаÑен Ð´Ð»Ñ Ð¿ÐµÑедаÑи даннÑÑ
ÑоÑм, однако Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзован Ð´Ð»Ñ Ð¿ÐµÑедаÑи Ð¿Ð°Ñ ÐºÐ»ÑÑ/знаÑение незавиÑимо Ð¾Ñ ÑоÑм. ÐаннÑе пеÑедаÑÑÑÑ Ð² Ñом же ÑоÑмаÑе, как и даннÑе, пеÑедаваемÑе меÑодом
ÑоÑмÑ, Ñ ÑÑÑановленной кодиÑовкой submit()
enctype="multipart/form-data"
.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑамоÑÑоÑÑелÑно ÑоздаÑÑ Ð¿ÑÑÑой обÑÐµÐºÑ FormData
, наполнив его заÑем даннÑми, иÑполÑзÑÑ ÐµÐ³Ð¾ меÑод append()
:
var formData = new FormData();
formData.append("username", "Groucho");
formData.append("accountnum", 123456); // ÑиÑло 123456 немедленно пÑеобÑазÑеÑÑÑ Ð² ÑÑÑÐ¾ÐºÑ "123456"
// Файл, вÑбÑаннÑй полÑзоваÑелем
formData.append("userfile", fileInputElement.files[0]);
// JavaScript Blob обÑекÑ
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()
(ÐнаÑение Ð¿Ð¾Ð»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Blob
, File
, или ÑÑÑокой: еÑли знаÑение не ÑвлÑеÑÑÑ Ð½Ð¸ Blob, ни File, Ñо оно авÑомаÑиÑеÑки пÑеобÑазÑеÑÑÑ Ð² ÑÑÑокÑ).
ÐаннÑй пÑÐ¸Ð¼ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑÐ²Ð°ÐµÑ Ñоздание ÑкземплÑÑа FormData
, ÑодеÑжаÑего Ð¿Ð¾Ð»Ñ "username", "accountnum", "userfile" и "webmasterfile". ÐкземплÑÑ FormData
заÑем оÑпÑавлÑеÑÑÑ Ð¿Ñи помоÑи меÑода send()
обÑекÑа XMLHttpRequest
. Ðоле "webmasterfile" ÑвлÑеÑÑÑ ÑкземплÑÑом клаÑÑа
. ÐбÑÐµÐºÑ ÐºÐ»Ð°ÑÑа Blob
Blob
ÑвлÑеÑÑÑ Ñайлом-подобнÑм обÑекÑом, ÑодеÑжаÑим "ÑÑÑÑе" даннÑе. ÐпÑеделение даннÑÑ
как Blob
не ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм в наÑивном javascript. ÐнÑеÑÑейÑ
базиÑÑеÑÑÑ Ð½Ð° File
Blob
, наÑледÑÑ ÐµÐ³Ð¾ ÑÑнкÑионалÑноÑÑÑ Ð¸ ÑаÑÑиÑÑÑ ÐµÐ³Ð¾ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки Ñайлов в ÐС полÑзоваÑелÑ. ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑов клаÑÑа Blob
иÑполÑзÑйÑе
.Blob() constructor
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа FormDatа
, ÑодеÑжаÑего даннÑе ÑÑÑеÑÑвÑÑÑей ÑоÑÐ¼Ñ (<form>
) пеÑедайÑе ÑоÑÐ¼Ñ Ð² каÑеÑÑве аÑгÑменÑа пÑи Ñоздании обÑекÑа FormData:
**ÐÑимеÑание:**FormData бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑолÑко Ñе Ð¿Ð¾Ð»Ñ Ð²Ð²Ð¾Ð´Ð°, коÑоÑÑе иÑполÑзÑÑÑ Ð°ÑÑибÑÑ name.
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
поÑле его ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ до оÑпÑавки даннÑÑ
:
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);
Такой пÑиÑм позволÑÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ð² ÑоÑÐ¼Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑиÑ, коÑоÑаÑ, напÑимеÑ, не нÑждаеÑÑÑ Ð² демонÑÑÑаÑии полÑзоваÑелÑ.
ÐÑпÑавка Ñайлов пÑи помоÑи обÑекÑа FormDataÐÑ Ñак же можеÑе оÑпÑавлÑÑÑ ÑÐ°Ð¹Ð»Ñ Ð¿Ñи помоÑи FormData
. ÐÑоÑÑо вклÑÑиÑе <input>
Ñ Ñипом file
в ÑоÑмÑ.
<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>
ÐаÑем Ð²Ñ ÑможеÑе оÑпÑавиÑÑ Ð²ÑбÑаннÑй Ñайл ÑледÑÑÑим обÑазом:
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,
);
ÐÑимеÑание: ÐÑли Ð´Ð»Ñ ÑоÑÐ¼Ñ Ñказан аÑÑибÑÑ method
, Ñо бÑÐ´ÐµÑ Ð¸ÑполÑзован именно ÑÑÐ¾Ñ Ð¼ÐµÑод Ð´Ð»Ñ Ð¾ÑпÑавки даннÑÑ
на ÑеÑвеÑ, а не меÑод, ÑказаннÑй в вÑзове open()
ÐÑ Ñак же можеÑе добавиÑÑ
или File
непоÑÑедÑÑвенно к обÑекÑÑ Blob
FormData
:
data.append("myfile", myBlob, "filename.txt");
ÐеÑод append()
пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ 3й опÑионалÑнÑй паÑамеÑÑ - название Ñайла, коÑоÑое добавлÑеÑÑÑ Ð² заголовок Content-Disposition
пÑи оÑпÑавке на ÑеÑвеÑ. ÐÑли название Ñайла не Ñказано (или даннÑй паÑамеÑÑ Ð½Ðµ поддеÑживаеÑÑÑ) иÑполÑзÑеÑÑÑ Ð¸Ð¼Ñ "blob".
ÐÑ Ñак же можеÑе иÑполÑзоваÑÑ FormData
Ñ 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, // СообÑиÑÑ jQuery не пеÑедаваÑÑ ÑÑи даннÑе
contentType: false, // СообÑиÑÑ jQuery не пеÑедаваÑÑ Ñип конÑенÑа
});
ÐÑпÑавка ÑоÑм и Ñайлов пÑи помоÑи AJAX без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑекÑа FormData
ÐÑли Ð²Ñ Ð·Ð°Ð¸Ð½ÑеÑеÑÐ¾Ð²Ð°Ð½Ñ Ð² оÑпÑавке ÑоÑм и Ñайлов пÑи помоÑи AJAX без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ FormData, пÑоÑиÑайÑе /ru/docs/Web/API/XMLHttpRequest_API/Using_XMLHttpRequest#Submitting_forms_and_uploading_files
СмоÑÑиÑе ÑакжеRetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4