2016-11-21 91 views
1

我工作的一個項目,在那裏我應該阿賈克斯users表中刪除用戶。無論如何,我一直在尋求多種解決方案,但它根本無法工作。下面是我得到的錯誤:Laravel5 AJAX刪除行不通

Failed to load resource: the server responded with a status of 500 (Internal Server Error).

TokenMismatchException in VerifyCsrfToken.php line 46

JS:

$('.btn-delete').click(function(){ 
    var id = $(this).val(); 
    $.ajax({ 
     type: 'DELETE', 
     url: '/laravel-exercise/public/index/'+id, 
     success: function (data) { 
      console.log('Success:', data); 
     }, 
     error: function (data) { 
      console.log('Error:', data); 
     } 
    }); 
}); 

查看:

<button class="btn btn-danger btn-delete" 
value="{{$user->id}}" data-token="{{ csrf_token() }}">Delete</button> 

路線:

Route::delete('index/{$id}', '[email protected]'); 

UsersController:

public function destroy($id) 
    { 
      $user = User::findOrFail($id); 
      $user->delete(); 

      return view('pages.index')->with([ 
       'flash_message' => 'The user has been deleted.', 
       'flash_message_important' => 'true', 
      ]); 
    } 

這是怎麼回事錯在這裏?

+0

錯誤內部服務器 - menas您的AJAX是做工精細....更好看的PHP代碼 –

+0

Laravel日誌文件,請。 –

+0

我是Laravel的新手,如果你告訴我更多關於如何獲得它,我會很高興地向你展示給你。 – sklrboy

回答

4

可能是由於CSRF保護。

嘗試在綁定按鈕單擊之前添加'X-CSRF-TOKEN'

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

$('.btn-delete').click(function(){ 
    var id = $(this).val(); 
    $.ajax({ 
     type: 'DELETE', 
     url: '/laravel-exercise/public/index/'+id, 
     success: function (data) { 
      console.log('Success:', data); 
     }, 
     error: function (data) { 
      console.log('Error:', data); 
     } 
    }); 
}); 

將CSRF令牌添加到您的請求中。

查看here的相關信息。

找到了路線,否則我會捕獲404例外。

編輯

看着你是怎樣使該按鈕時,你也可以使用一個post請求,但傳遞_method數據。

HTML:

<button class="btn btn-danger btn-delete" value="{{$user->id}}" 
    data-token="{{ csrf_token() }}">Delete</button> 

的Javascript:

$('.btn-delete').click(function(){ 
    var token = $(this).data('token'); 
    var id = $(this).val(); 

    $.ajax({ 
     url: '/laravel-exercise/public/index/'+id, 
     type: 'post', 
     data: {_method: 'delete', _token :token}, 
     success: function (data) { 
      console.log('Success:', data); 
     }, 
     error: function (data) { 
      console.log('Error:', data); 
     } 
    }); 
}); 
+0

不幸的是,無論如何,我已經添加它之前也按鈕鏈接。 – sklrboy

+0

不,我的意思是,錯誤是因爲csrf保護。你可以試一下'$('meta [name =「csrf-token」]')的console.log。attr('content')' – GiuServ

+0

現在隨着你的最新更新,我得到了一個「laravel-exercise.js:50 Uncaught ReferenceError:令牌沒有在HTMLButtonElement中定義爲 。(http:// localhost/laravel-exercise/public/js /laravel-exercise.js:50:51) at HTMLButtonElement.dispatch(https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js:3:10315) at HTMLButtonElement .q.handle(https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js:3:8342)「錯誤。 – sklrboy