我有一个表单,我需要在提交之前处理。该表单包含多个text
和radio
输入,以及file
个输入。我使用 jQuery 传递表单数据:
$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
为空。任何帮助表示赞赏。
答案 0 :(得分:1)
您的问题是您使用GET发送<input type="text" class="invalid">
<input type="text" class="invalid-large">
<input type="text" class="invalid-max">
的请求。当您使用本机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的原因。
请注意,当你写
时enctype = multipart/form-data
你告诉jQuery不要弄乱你传递的数据并保持原生的Formdata对象不变。这将导致自动设置enctype。
答案 1 :(得分:0)
首先我建议使用“POST”类型在您的方法中传递数据,然后尝试序列化表单数据
$.ajax({
type: 'POST',
url: '/get-data', /*Route laravel*/
data: formData.serialize(),
contentType: false,
processData: false
}).done(function(response) {
// handle response
});
答案 2 :(得分:0)
所以,我找不到任何资源来确认这一点,但似乎FormData
无法使用GET
类型 - 至少在使用jQuery&#39; s {{1}时功能。
将$.ajax()
更改为GET
- 表单输入正在进入Laravel控制器,没有任何问题。
我不确定是否喜欢它,因为我实际上不是POST
任何事情,而是POST
我需要的信息。无论如何,它有效。