2015-06-12 23 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。无论如何,它的作品。