2017-03-16 68 views
0

使用Ajax,可以使用以下發送的部分數據爲形式的數據ajax-局部形式數據提交

$("#CreateForm").find("#form-section-1").find('input, textarea, select').serialize() 

試圖用相同的API FORMDATA -

new FormData($('form#CreateForm')[0]) 

這確實但是不行 -

var formdata = new FormData($('form#CreateForm').find("#form-section-1").find('input, textarea, select')) 

由於下面循環沒有給出結果 -

for (var pair of formdata.entries()) { 
    console.log(pair[0]+ ', ' + pair[1]); 
} 

怎樣才能以緊湊的形式提交部分形式的數據與FormData API像序列化?

編輯: 在接受溶液中,我不得不進一步增加這一條件下特別是文件 -

if($(this).is(':input:file')) { 
formData.append(this.name, $(this)[0].files[0]); 
} else { 
formData.append(this.name, $(this).val()); 
} 

回答

1

FormData constructor接受可選天然<form/>元件參數來傳遞的所有數據的形式。請注意,

$('form#CreateForm') // jQuery object 
$('form#CreateForm')[0] // native form element 
$('form#CreateForm #form-section-1').find('input, textarea, select') // jQuery objects 
$('form#CreateForm #form-section-1').find('input, textarea, select')[0] // some native non-form element 

所以你不能真的使用構造函數。

FormData對象確實有一個​​將新值添加到對象中。你可以用它做

var formData = new FormData(); 
$('form#CreateForm #form-section-1').find('input, textarea, select').each(function() { 
    formData.append(this.name, $(this).val()); 
}); 

FYI :inputinput|select|textarea|button簡寫。

+0

這也適用於類型文件的輸入字段?因爲它似乎沒有完全通過。 – fortm

+1

我修改了一些文件,現在它工作。在for循環 - >如果($(本)。是( ':輸入:文件')){\t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t formData.append(這一點。名稱,$(this)[0] .files [0]); \t \t \t \t \t \t \t \t \t}其他{ \t \t \t \t \t \t \t \t \t \t formData.append(this.name,$(本).VAL()); \t \t \t \t \t \t \t \t \t} – fortm

+1

你做了什麼是正確的。 'this.files [0]'也可以用作$(this)[0]'== this'。 – Mikey