Chrome问题 - AJAX插入的文件输入无法上传文件

时间:2012-03-02 22:34:58

标签: php javascript jquery ajax

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

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

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

全部谢谢

2 个答案:

答案 0 :(得分:1)

您是否使用$ .post或form.submit()并不清楚。如果您使用的是form.submit(),则可能会出现其他问题。

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

此MDN页面Using FormDataObjects提供了有关如何使用它的很好示例。请注意,如果使用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
});

答案 1 :(得分:0)

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