Chrome问题-AJAX插入文件输入未上传文件

Chrome Issue - AJAX Inserted File Input not uploading file

本文关键字:文件 输入 Chrome -AJAX 插入 问题      更新时间:2023-09-26

我有一个表单,其中一个文件输入字段是通过AJAX动态插入的。本质上,我所做的是显示一个表单,用户选择他们想要的模板,我根据他们选择的模板插入一些额外的表单字段。其中一个具有文件输入。问题是,当我提交添加了文件输入的表单时,PHP$_FILES数组会给我一个错误代码4,这意味着没有上传文件。有人知道我需要做什么才能上传这些文件吗?

我想我必须在JS方面做一些事情来重新评估我发送的表单字段,但我什么都找不到。(是的,我在表单上使用了正确的enctype。)

更新:这只发生在Safari/Chrome上。我在其他地方读到,他们认为这是webkit浏览器的一个安全功能。我不知道是否有解决办法。。

感谢所有

目前尚不清楚您使用的是$.post还是form.submit()。如果您使用form.sub米特(),可能会出现其他问题。

否则,为了通过AJAX将文件发送到服务器,您需要使用Form Data对象。

这个使用FormDataObjects的MDN页面有关于如何使用它的好例子。请注意,如果使用jQuery,则需要将processData和contentType设置为false。请参阅以下内容(取自MDN页面)。

var fd = new FormData(document.getElementById("fileinfo"));
fd.append("CustomField", "This is some extra data");
$.ajax({
  url: "stash.php",
  type: "POST",
  data: fd,
  processData: false,  // tell jQuery not to process the data
  contentType: false   // tell jQuery not to set contentType
});

如果您通过form.submit()方法发送表单,那么发送文件应该没有问题。您是否尝试通过ajax发送文件?如果是这样,你就不能直接说。使用iframe、flash或使用FileReader读取文件数据,并在ajax请求中发送原始数据。