FormData() – zestaw par key/value – typ danych może być file, blog lub string.
https://developer.mozilla.org/en-US/docs/Web/API/FormData
Kodowanie: multipart/form-data, wbudowany iterator ( pętla – for…of)
Metody: append(), delete(), get(), getAll(), set(), has(), keys(), values(), entries()
var formData = new FormData(); formData.append("username", "Groucho"); formData.append("accountnum", 123456); // liczba skonwertowana do string "123456" formData.append("userfile", fileInputElement.files[0]); // plik z lokalnego filesystemu var content = '<a id="a"><b id="b">hey!</b></a>'; // zawartość nowo utworzonego pliku var blob = new Blob([content], { type: "text/xml"}); // raw data - plik utworzony w locie formData.append("webmasterfile", blob); var request = new XMLHttpRequest(); request.open("POST", "https://foo.com/submitform.php"); request.send(formData);
Wysyłanie istniejącego formularza (przyjmuje kontrolki input z atrybutem name)
var formElement = document.querySelector("form"); // Formularz z DOM var formData = new FormData(formElement); // obj. FormData formData.append("serialnumber", serialNumber++); // dodaje pole var request = new XMLHttpRequest(); request.open("POST", "submitform.php"); request.send(formData); // wysyłka formularza
Wysyłka formularza bez przeładowania strony – Ajax
<form enctype="multipart/form-data" method="post" name="fileinfo"> <label>E-mail:</label> <input type="email" autocomplete="on" autofocus name="userid" maxlength="64" /><br/> <label>Podaj etykietę:</label> <input type="text" name="filelabel" size="12" maxlength="32" /><br/> <label>Wybierz plik:</label> <input type="file" name="file" required /> <input type="submit" value="Wyślij plik!" /> </form>
var form = document.forms.fileinfo; form.addEventListener('submit', function(ev) { var oData = new FormData(form); oData.append("CustomField", "Extra dane"); oData.append("myfile", myBlob, "filename.txt"); // Dodaje blob jako plik var oReq = new XMLHttpRequest(); oReq.open("POST", "stash.php", true); oReq.onload = function(oEvent) { if (oReq.status == 200) { console.log("Plik wgrany!"); } else { console.log("Error " + oReq.status + " błąd przesyłu."); } }; oReq.send(oData); ev.preventDefault(); }, false);