简体   繁体   中英

multipart/form-data possible to send with javascript?

I am sending a file over POST together with text "name" using this form:

<form enctype="multipart/form-data" action="https://site[DOT]net/upload" method="post">
  <input id="name" type="text" />
  <input id="data" type="file" />
  <button type="submit" name="submit" />
</form>

I would like to do the exect same using javascript. In addition I dont want to be redirected. I want to stay on the html page and just show a popup "Upload done". How can I do this in javascript (no jquery)?

EDIT:

I tried this code but the POST is not working:

<script>
function uploader {
  var formData = new FormData();
  formData.append("name", "Smith");
  formData.append("data", fileInputElement.files[0]);
  var request = new XMLHttpRequest();

  request.open("POST", "https://site[DOT]net/upload");
  request.send(formData);
}
</script>

<form>
    <input id="name" type="text" />
    <input id="data" type="file" />
    <button type="submit" name="submit" />
    <button onclick="uploader()">Click</button>
</form>

Uploading the entire form with javascript, including the files, can be done by using the FormData API and XMLHttpRequest

var form = document.getElementById('myForm'); // give the form an ID
var xhr  = new XMLHttpRequest();              // create XMLHttpRequest
var data = new FormData(form);                // create formData object


xhr.onload = function() {
    console.log(this.responseText); // whatever the server returns
}

xhr.open("post", form.action);      // open connection
xhr.send(data);                     // send data

If you need to support IE10 and below, it gets increasingly complicated, and would in some cases require posting through iFrames etc.

In case any wants to do this with the new form instead of xhr this is the equivalent. Also see: fetch post with multipart form data

 var form = document.getElementById('formid'); form.onsubmit = async (e) => { e.preventDefault(); const form = e.currentTarget; const url = form.action; try { const formData = new FormData(form); const response = await fetch(url, { method: 'POST', body: formData }); console.log(response); } catch (error) { console.error(error); } }
 <form id="formid" enctype="multipart/form-data" action="#" method="post"> <input id="name" type="text" /> <input id="data" type="file" /> <button type="submit" name="submit">Submint</button> </form>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM