TokenMismatchException в строке VerifyCsrfToken.php 67 на laravel с использованием ajax

В этом представлении есть ссылка, которая вызывает функцию javascript

@extends('layouts.main') @section('content') <table class="table"> <tr> <th>ID</th> <th>Nombre</th> <th>Opción</th> </tr> @foreach ($tasks as $task) <tr> <td>{{$task->id}}</td> <td>{{$task->name}}</td> <td><a href="javascript:void(0)" onclick="eliminar({{$task->id}})" class="btn btn-danger">Eliminar</a></td> </tr> @endforeach </table> @stop 

и вот код javascript

 function eliminar(id){ $.ajax({ type: "DELETE", url: "task/"+id, success: function (data) { console.log(data); }, error: function (data) { alert('Error:', data); } }); } 

и с вызовом ajax я хочу вызвать метод destroy моего контроллера

 <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use App\Task; class TaskController extends Controller { /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $tasks = Task::all(); return view('mainview',['tasks' => $tasks]); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { // } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { // } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { // } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { return "destroy"; } } 

Но когда я нажимаю ссылки, я получаю эту ошибку:

Ошибка TokenMismatchException в строке VerifyCsrfToken.php 67

Я новичок в Laravel, но я думал, что csrf для форм.

Вы должны добавить csrf_field к основному csrf_field :

 {{ csrf_field() }} 

Затем добавьте _token к вашему запросу:

 var _token = $('input[name="_token"]').val(); function eliminar(id){ $.ajax({ type: "DELETE", url: "task/"+id, data: { _token : _token }, success: function (data) { console.log(data); }, error: function (data) { alert('Error:', data); } }); } 

Или вы можете добавить его один раз в ajaxSetup и это повлияет на все вызовы на производные $.ajax или Ajax, такие как $.get() :

 $.ajaxSetup( { headers: { 'X-CSRF-Token': $('input[name="_token"]').val() } }); 

Посмотрите на CSRF Protection .

Надеюсь это поможет.

Это то, что сработало для меня. Я нашел несколько ответов в Интернете, и никто из них не работал; однако, после объединения всех, я получил вызов Ajax, чтобы пройти.

  1. В главе вашего файла просмотра добавьте следующую строку:

     <meta name="csrf-token" content="<?php echo csrf_token() ?>"> // This will retrieve the necessary token. 
  2. Затем извлеките значение токена и поместите его на переменную (необязательный шаг):

     var currentToken = $('meta[name="csrf-token"]').attr('content'); 
  3. На ваш вызов ajax укажите значение токена в поле «data:»:

     $.ajax({type: 'POST', data: {_token:currentToken},....}); 

Вы можете избежать необязательного шага создания новой переменной в поле «data:»; однако, я считаю, что этот шаг легче понять.

Надеюсь это поможет.

При передаче метода DELETE необходимо добавить поле ввода токена.

Html:

 <input class="token" value="{{ csrf_field() }}"/> 

Код:

 function eliminar(id){ var formData = '_token=' + $('.token').val(); $.ajax({ type: "DELETE", url: "task/"+id, data: formData, success: function (data) { console.log(data); }, error: function (data) { alert('Error:', data); } }); } 

Вы также можете удалить этот маршрут из процесса проверки, добавив его в массив except в промежуточном программном обеспечении.