Input::all() 在 FormData 对象通过后为空
Input::all() empty after FormData object passed
我有一个表单需要在提交前处理。该表单有几个 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
是空的。任何帮助表示赞赏。
首先,我建议使用类型 'POST' 在您的方法中传递数据,其次,尝试序列化表单数据
$.ajax({
type: 'POST',
url: '/get-data', /*Route laravel*/
data: formData.serialize(),
contentType: false,
processData: false
}).done(function(response) {
// handle response
});
所以,我找不到任何资源来证实这一点,但似乎 FormData
不适用于 GET
类型 - 至少在使用 jQuery 的 $.ajax()
函数。
已将 GET
更改为 POST
- 表单输入毫无问题地到达 Laravel 控制器。
我不确定我是否喜欢它,我想,因为我实际上没有 POST
任何东西,而是 GET
获取我需要的信息。无论如何,它有效。
您的问题是您正在使用 GET 发送带有 enctype = multipart/form-data
的请求。当您使用本机 FormData 对象时,这是您默认获得的格式。您可以阅读 how to send the form's data
using the POST method and setting the enctype attribute to application/x-www-form-urlencoded (default);
using the POST method and setting the enctype attribute to text/plain;
using the POST method and setting the enctype attribute to multipart/form-data;
using the GET method (in this case the enctype attribute will be ignored).
因此,如果您将请求设置为 GET,请求正文中的表单内容将被忽略。 enctype 属性告诉服务器如何处理您的请求。这就是为什么你应该使用 POST.
注意写的时候
contentType: false,
processData: false
你是在告诉 jQuery 不要弄乱你正在传递的数据,并保持你的原生 Formdata 对象不变。这将导致自动设置 enctype。
我有一个表单需要在提交前处理。该表单有几个 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
是空的。任何帮助表示赞赏。
首先,我建议使用类型 'POST' 在您的方法中传递数据,其次,尝试序列化表单数据
$.ajax({
type: 'POST',
url: '/get-data', /*Route laravel*/
data: formData.serialize(),
contentType: false,
processData: false
}).done(function(response) {
// handle response
});
所以,我找不到任何资源来证实这一点,但似乎 FormData
不适用于 GET
类型 - 至少在使用 jQuery 的 $.ajax()
函数。
已将 GET
更改为 POST
- 表单输入毫无问题地到达 Laravel 控制器。
我不确定我是否喜欢它,我想,因为我实际上没有 POST
任何东西,而是 GET
获取我需要的信息。无论如何,它有效。
您的问题是您正在使用 GET 发送带有 enctype = multipart/form-data
的请求。当您使用本机 FormData 对象时,这是您默认获得的格式。您可以阅读 how to send the form's data
using the POST method and setting the enctype attribute to application/x-www-form-urlencoded (default);
using the POST method and setting the enctype attribute to text/plain;
using the POST method and setting the enctype attribute to multipart/form-data;
using the GET method (in this case the enctype attribute will be ignored).
因此,如果您将请求设置为 GET,请求正文中的表单内容将被忽略。 enctype 属性告诉服务器如何处理您的请求。这就是为什么你应该使用 POST.
注意写的时候
contentType: false,
processData: false
你是在告诉 jQuery 不要弄乱你正在传递的数据,并保持你的原生 Formdata 对象不变。这将导致自动设置 enctype。