2012-09-30 77 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

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