2016-02-13 36 views
1

我的刀片是:法不允許Laravel(PUT)隨着AJAX調用5.2

{!! Form::open(['method' => 'PUT', 'id' => 'confirmTCU', 
            'action' => ['[email protected]', $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', '[email protected]'); 

我的控制器是:

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。

在旁邊,我能夠進行刪除操作,但不要把...

此外,不使用AJAX方法時,可以完美運行。

我的問題在哪裏?

+1

您是否正在序列化正確的表單?你當前的代碼顯示'var inputData = $('#formDeleteTCU')。serialize();',但是你顯示的表單的id是'confirmTCU'。 – patricus

+0

是的!讓我調查一下! –

+0

請把它作爲答案!有效! –

回答

1

您的代碼應該可以正常工作,但看起來您正在序列化錯誤的表單。您當前的代碼顯示var inputData = $('#formDeleteTCU').serialize();,但您顯示的表單的ID爲confirmTCU

0

將您的ajax類型從'PUT'更改爲'POST',Laravel將讀取您的參數'_method',並將'POST'看作'PUT'。

+0

不工作:POST http://laravel.dev/tournaments/bisque/categories/3/users/kathryn-reilly/confirm 405(方法不允許) –