在 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 方法表单而不重新加载页面?

此路由不支持 PUT 方法。支持的方法:GET、HEAD、POST。在 laravel 中

laravel 不支持 put 方法