javascript - 通过 Ajax 上传文件是重复的

标签 javascript ajax

我想通过 Ajax 和 FormData 对象上传文件。为什么我的文件重复?

var button = document.querySelector('#send');
document.querySelector('#send').addEventListener('click', sendForm, false);
function sendForm(e) {
  e.preventDefault();
  var formElement;
  var formData;
  var xhr;
  var JSONObject;
  formElement = document.querySelector('#form');
  formData = new FormData(formElement);
  var fileInput = document.querySelector('#file');
  var files = fileInput.files;
  for (var i = 0; i < files.length; i++) {
    var file = files[i];
    formData.append('file[]', file, file.name);
  }
  console.log(...formData);
  xhr = new XMLHttpRequest();
  /**/
}
<form id="form">
	<label for="firstname">Prénom
		<input type="text" name="firstname" id="firstname" size="30" />
	</label>
	<label for="lastname">Nom
		<input type="text" name="lastname" id="lastname" size="30" />
	</label>
	<input type="file" name="file[]" id="file" multiple>
	<button id="send" type="submit">Submit</button>
</form>

我的代码有什么问题?我的循环不正确吗?

谢谢。

最佳答案

因为您手动将文件附加到 formData,它们已经存在。

注释掉不必要的代码后,您的代码就可以正常工作了。

var button = document.querySelector('#send');
document.querySelector('#send').addEventListener('click', sendForm, false);
function sendForm(e) {
  e.preventDefault();
  var formElement;
  var formData;
  var xhr;
  var JSONObject;
  formElement = document.querySelector('#form');
  formData = new FormData(formElement);
  var fileInput = document.querySelector('#file');
  /*
  The code that appends files in the formData, where thhey already here : 
  var files = fileInput.files;
  for (var i = 0; i < files.length; i++) {
    var file = files[i];
    formData.append('file[]', file, file.name);
  }*/
  console.log(...formData);
  xhr = new XMLHttpRequest();
  /**/
}
<form id="form">
	<label for="firstname">Prénom
		<input type="text" name="firstname" id="firstname" size="30" />
	</label>
	<label for="lastname">Nom
		<input type="text" name="lastname" id="lastname" size="30" />
	</label>
	<input type="file" name="file[]" id="file" multiple>
	<button id="send" type="submit">Submit</button>
</form>

关于javascript - 通过 Ajax 上传文件是重复的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50062565/

相关文章:

javascript - 从 DOM 访问 Riot.js 标签的属性

JavaScript.replace(),删除标签和内容

javascript - 替换文件中的标记而不写入新文件

javascript - 使用 ajax post 响应时出现错误 block

php - 单击复选框后,jquery/ajax/php 将数据加载到文本字段中

java - 如何使用 jQuery Ajax 将 javascript 数组发送到 struts 操作

javascript - ejs - 希望在 EJS 模板中添加 if 条件

javascript - 重试次数和间隔

javascript - 从 div 中的 json 文件写入解析后的响应

ajax - 处理AJAXified JSF 2.0组件时,不应该立即使用="true"吗?