2016-11-21 2 views
1

Я работаю над проектом, где я должен удалить пользователей из users таблицы с AJAX. Я искал несколько решений, но просто так не работал. Вот ошибка я получаю:Laravel5 Аякса удалять не будет работать

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 ваш Аякса работает нормально .... лучше смотреть на 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. Вы можете попробовать console.log '$ ('meta [name =" csrf-token "]').attr ('content') ' – GiuServ

+0

Теперь с вашим последним обновлением я получил« laravel-exercise.js: 50 Uncaught ReferenceError: токен не определен в HTMLButtonElement. (http: // localhost/laravel-exercise/public/js /laravel-exercise.js:50:51) в HTMLButtonElement.dispatch (https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js:3:10315) в HTMLButtonElement .q.handle (https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js:3:8342) ". – sklrboy

Смежные вопросы