传递FormData对象后,Input :: all()为空

时间:2015-06-12 13:37:27

标签: javascript jquery laravel laravel-5 form-data

我有一个表单,我需要在提交之前处理。该表单包含多个textradio输入,以及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为空。任何帮助表示赞赏。

3 个答案:

答案 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我需要的信息。无论如何,它有效。