2012-09-30 49 views
3

我使用jQuery做AJAX上传与附加数据的附加数据。我下面就这一个How can I upload files asynchronously?,我使用的代码#2的代码如下:jQuery的文件上传与

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脚本在服务器上没有采取行动(如它没有收到其他相关数据)

任何想法?

在此先感谢。

回答

4

当写形式发送一个文件,你指定POST方法和multipart/form-data编码。每个<input>在HTML代码会被浏览器在HTTP请求体part进行转换,这样你就可以在同一时间多个文件和字符串发送。 Here is the documentation for 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对象:它并不代表一个二进制内容。相反,它是一个name-value pair data structure,其中键总是字符串,蚂蚁的值可以是字符串或二进制对象。

+0

谢谢你的回答。它帮助我认识到可以将文本数据添加到FormData中 –

0

尝试添加:加密类型: '多/表单数据'

e.g

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

谢谢我现在正在尝试,虽然我不知道它会工作,因为我已经在我的表单中。 –

+0

,那也不行...... –