繁体   English   中英

multipart/form-data 可以用javascript发送吗?

[英]multipart/form-data possible to send with javascript?

我使用这种形式通过 POST 发送一个文件和文本“名称”:

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

我想使用 javascript 做同样的事情。 另外我不想被重定向。 我想留在 html 页面上,只显示一个弹出窗口“上传完成”。 我怎样才能在 javascript(没有 jquery)中做到这一点?

编辑:

我试过这段代码,但 POST 不起作用:

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

使用 javascript 上传整个表单,包括文件,可以通过使用FormData APIXMLHttpRequest来完成

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

如果您需要支持 IE10 及以下版本,它会变得越来越复杂,并且在某些情况下需要通过 iFrame 等发布。

如果有人想用新形式而不是 xhr 来做到这一点,这是等效的。 另请参阅: 使用多部分表单数据获取帖子

 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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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