【问题标题】:Input::all() empty after FormData object passed在 FormData 对象传递后 Input::all() 为空
【发布时间】:2015-08-28 13:11:25
【问题描述】:

我有一个表单需要在提交之前进行处理。该表单有几个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 是空的。任何帮助表示赞赏。

【问题讨论】:

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


    【解决方案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 被自动设置。

    【讨论】:

      【解决方案2】:

      所以,我找不到任何资源来确认这一点,但似乎 FormData 不适用于 GET 类型 - 至少在使用 jQuery 的 $.ajax() 函数时。

      GET 更改为 POST - 表单输入可以毫无问题地进入 Laravel 控制器。

      我不确定我是否喜欢它,我想,因为我实际上不是POSTing 任何东西,而是GETting 我需要的信息。无论如何,它有效。

      【讨论】:

        【解决方案3】:

        首先我建议使用“POST”类型在您的方法中传递您的数据,其次,尝试序列化表单数据

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

        【讨论】:

        • 谢谢,我已经弄清楚是什么弄乱了代码。另外,serialize 不会给我文件输入数据。
        • 不能调用formData.serialize()。本机 FormData 对象不包含序列化属性。您可以使用 data: formData 这将起作用
        猜你喜欢
        • 2014-11-27
        • 2016-07-23
        • 2021-05-30
        • 2015-06-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 1970-01-01
        相关资源
        最近更新 更多