【问题标题】:Method not allow (PUT) With AJAX Call in Laravel 5.2方法不允许(PUT)在 Laravel 5.2 中使用 AJAX 调用
【发布时间】:2016-05-24 08:41:35
【问题描述】:

我的刀片是:

{!! Form::open(['method' => 'PUT', 'id' => 'confirmTCU',
                                    'action' =>  ['TournamentUserController@confirmUser', $tournament->slug, $categoryTournament->id,$user->slug  ]]) !!}

它会生成我的表单:

<form method="POST" action="http://laravel.dev/tournaments/bisque/categories/1/users/admin/confirm" accept-charset="UTF-8" id="confirmTCU">
<input name="_method" type="hidden" value="PUT">
<input name="_token" type="hidden" value="tiaIHtctMbo1NwbEK8TqoKOyrN8ZSyeQELSyYL9A">

<button type="submit" class="btn btn-flat text-warning-600 btnConfirmTCU" id="confirm_bisque_1_admin" data-tournament="bisque" data-category="1" data-user="admin">
    <i class="text-danger glyphicon glyphicon-remove-sign"></i>
</button>
</form>

我的 AJAX 是:

$('.btnConfirmTCU').on('click', function (e) {
    e.preventDefault();
    $(this).prop("disabled", true);

    var inputData = $('#formDeleteTCU').serialize();
    //var tournamentSlug      =   $(this).data('tournament');
    var categoryId          =   $(this).data('category');
    var userSlug            =   $(this).data('user');

    $.ajax(
        {
            type: 'PUT',
            url: url + '/categories/' + categoryId + '/users/' + userSlug + '/confirm',
            data: inputData,
            success: function (data) {
                        ...
            },
            error: function (data) {
                        ...
            }    
        }
    )
});

我的路线是:

Route::put('tournaments/{tournamentId}/categories/{categoryTournamentId}/users/{userId}/confirm', 'TournamentUserController@confirmUser');

我的控制器是:

public function confirmUser($tournamentSlug, $tcId, $userSlug)
{
    $user = User::findBySlug($userSlug);
    $ctu = CategoryTournamentUser::where('category_tournament_id', $tcId)
        ->where('user_id', $user->id)->first();

    $ctu->confirmed ? $ctu->confirmed = 0 : $ctu->confirmed = 1;
    $ctu->save();
    return redirect("tournaments/$tournamentSlug/users");
}

我看到了很多关于它的话题,但没有一个能解决我的问题。

由于大多数浏览器都不允许 PUT,Laravel 像 POST 一样发送它,但包含一个带有 PUT 值的隐藏字段 _method。

此外,我可以执行 DELETE 操作,但不能执行 PUT...

此外,方法在不使用 AJAX 时也能完美运行。

我的问题在哪里???

【问题讨论】:

  • 您是否在序列化正确的表单?您当前的代码显示var inputData = $('#formDeleteTCU').serialize();,但您显示的表单的ID 是confirmTCU
  • 是的!让我调查一下!
  • 请作为答案!成功了!
  • 完成。很高兴我能帮上忙。

标签: php jquery laravel laravel-5 laravel-5.2


【解决方案1】:

您的代码应该可以正常工作,但您似乎在序列化错误的表单。您当前的代码显示var inputData = $('#formDeleteTCU').serialize();,但您显示的表单的ID 是confirmTCU

【讨论】:

    【解决方案2】:

    将您的 ajax 类型从“PUT”更改为“POST”,Laravel 将读取您的参数“_method”并将该“POST”视为“PUT”。

    【讨论】:

    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2018-08-25
    • 2015-10-16
    • 2017-05-15
    • 2019-03-25
    • 2019-06-17
    • 2017-09-03
    • 2018-12-15
    相关资源
    最近更新 更多