2015-06-12 26 views
3

我有一個表單需要在提交之前處理。該表格有幾個textradio輸入,以及一個file之一。我使用jQuery的傳遞表單數據:輸入::所有()在FormData對象傳遞後爲空

$button.on('click', function(e) { 
    e.preventDefault(); 

    var formData = new FormData($('.js-my-form')[0]); 

    $.ajax({ 
     type: 'GET', 
     url: '/get-data', 
     data: formData, 
     contentType: false, 
     processData: false 
    }).done(function(response) { 
     // handle response 
    }); 

}); 

然後,在Laravel控制器:

$input = Input::all() // <- EMPTY ARRAY 

不知道爲什麼Input來自空。任何幫助讚賞。

回答

1

你的問題是你正在使用GET發送請求enctype = multipart/form-data。當您使用本機FormData對象時,這是您默認獲得的格式。您可以閱讀how to send the form's data

使用POST方法並將enctype屬性設置爲application/x-www-form-urlencoded(默認);

使用POST方法並將enctype屬性設置爲text/plain;

使用POST方法並將enctype屬性設置爲multipart/form-data;

使用GET方法(在這種情況下,enctype屬性將被忽略)。

因此,如果您將您的requesto設置爲GET,那麼表單中呈現的請求內容將被忽略。 enctype屬性告訴服務器如何處理您的請求。這就是你應該使用POST的原因。

需要注意的是,當你寫

contentType: false, 
processData: false 

你告訴jQuery的不惹你正在傳遞的數據,並留下您的本地FORMDATA對象不變。這會導致enctype自動設置。

0

首先,我建議使用類型「POST」在你的方法來傳遞您的數據和第二,嘗試序列化表單數據

$.ajax({ 
     type: 'POST', 
     url: '/get-data', /*Route laravel*/ 
     data: formData.serialize(), 
     contentType: false, 
     processData: false 
    }).done(function(response) { 
     // handle response 
    }); 
+0

謝謝,我已經弄清楚了代碼的混亂。另外,'serialize'不會給我文件輸入數據。 – lesssugar

+1

你不能調用formData.serialize()。本機FormData對象不包含serialize屬性。你可以使用data:formData,這會起作用 – devconcept

0

所以,我找不到任何資源來證實這一點,但它似乎FormData將不適用於GET類型 - 至少在使用jQuery的$.ajax()函數時。

更改了GETPOST - 並且表單輸入到Laravel控制器沒有問題。

不知道我喜歡它,因爲我實際上不是我想要的東西,而是GET。無論如何,它的作品。