在 Laravel 6 中使用 PUT 方法 AJAX 会导致空的 $request->all() 数组
Posted
技术标签:
【中文标题】在 Laravel 6 中使用 PUT 方法 AJAX 会导致空的 $request->all() 数组【英文标题】:Using PUT method AJAX results in empty $request->all() array in Laravel 6 【发布时间】:2020-02-15 21:31:03 【问题描述】:我有一个非常简单的表单用于测试目的,当我尝试使用 $.ajax 放置 formData 时,我得到一个空数组响应,但这仅在我使用 PUT 方法时发生,如果我使用 POST 而不是 PUT 方法作为预计。
我使用的是 Laravel 6,每个函数都有一个 var_dump:
var_dump($request->all())
当我使用 PUT 方法时,我得到:
array(0)
当我使用 POST 方法时,我得到:
array(4) ["form1"]=> string(1) "1" ["form2"]=> string(1) "2" ["form3"]=> string(1) "3" ["form4"]=> string(1) "4"
我需要 formData,因为我要 PUT 图像文件。我一直在寻找另一个类似的问题,但没有人解决我的问题。
还有其他方法可以执行此操作吗?
<form id="formTest" type="multipart/form-data">
<input name="form1" value="1">
<input name="form2" value="2">
<input name="form3" value="3">
<input name="form4" value="4">
<button type="submit">Accept</button>
</form>
<script>
$(document).ready(function ()
$('#formTest').on('submit', function (e)
e.preventDefault();
var formData = new FormData($(this)[0]);
$.ajax(
url: '<?echo($config->get('apiUrl'))?>movies/13',
type: 'PUT',
processData: false,
contentType: false,
data: formData,
success: function(result)
,
error: function(data)
console.log(data);
);
);
);
</script>
【问题讨论】:
你在路由文件中使用 Route::put() 吗? @MatMorici 是的,对于我正在使用的 PUT:Route::put('movies/id','MoviesController@update');对于 POST:Route::post('movies','MoviesController@add'); 【参考方案1】:尝试在表单中添加这两个输入字段。
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value=" csrf_token() ">
第一个是将表单提交方式更改为“PUT”,第二个是将 CSRF Token 包含到表单中。
然后在您的 AJAX 代码中,将 type: 'PUT' 更改为 type: 'POST'。
$.ajax(
url: '<?echo($config->get('apiUrl'))?>movies/13',
type: 'POST',
processData: false,
contentType: false,
data: formData,
success: function(result) ,
error: function(data)
console.log(data);
);
【讨论】:
完美运行!以上是关于在 Laravel 6 中使用 PUT 方法 AJAX 会导致空的 $request->all() 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel REST API 中使用 PUT 方法更新图像?
Laravel 5.8 文件上传使用 PUT 方法和 ajax
Laravel 错误 - 更新时不允许发布方法(使用 @method('put))
如何在 Laravel 中提交 PUT 方法表单而不重新加载页面?