带有附加数据的jQuery文件上传

我正在使用jQuery通过附加数据进行AJAX上传。 我正在关注它的Stackoverflow代码如何异步上传文件? 我正在使用的代码如下:

var formData = new FormData($('form')[0]); $.ajax({ type: "POST", url: "ajax/register.php", dataType: "text", data: { name: $("#name").val(), city: $("#city").val(), image: formData }, success: function(text) { if(text == "data ok pic ok") { window.location = "reg3.php"; } else { errorMessage(text); } }, cache: false, contentType: false, processData: false }); }); 

问题是,如果我删除与文件相关的代码,例如

 var formData = new FormData($('form')[0]); image: formData cache: false, contentType: false, processData: false 

然后代码工作,我可以发送其他数据,就像“名称”和“城市”。 当我放回与文件相关的代码时,它停止工作,控制台中没有错误,并且服务器上的PHP脚本没有任何操作(就像它没有收到其他相关数据)

有任何想法吗?

提前致谢。

编写表单以发送文件时,指定POST方法和multipart/form-data编码。 HTML代码中的每个都将由浏览器在HTTP请求正文的part中进行转换,因此您可以同时发送多个文件和字符串。 这是FormData的文档 (参见页面底部)。 基本上你应该使用

 var data = new FormData($('form')[0]); data.append("name", $("#name").val()); data.append("city", $("#city").val()); // ... $.post({ "ajax/register.php", data: data, processData: false, // tell jQuery not to process the data contentType: false // tell jQuery not to set contentType }); 

FormData对象旨在直接分配给data键。 您将附加字段附加到FormData对象:它不表示二进制内容。 相反,它是一个名称 – 值对数据结构 ,其中键始终是字符串,而值可以是字符串或二进制对象。

尝试添加:enctype:’multipart / form-data’

例如

  { type: "POST", url: "ajax/register.php", dataType: "text", enctype: 'multipart/form-data', data: { name: $("#name").val(), city: $("#city").val(), image: formData } }