使用ajax在laravel上的VerifyCsrfToken.php第67行中的TokenMismatchException

该视图有一个调用javascript函数的链接

@extends('layouts.main') @section('content')  @foreach ($tasks as $task)  @endforeach 
ID Nombre Opción
{{$task->id}} {{$task->name}} id}})" class="btn btn-danger">Eliminar
@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方法

  $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"; } } 

但是,当我点击链接时,我收到此错误:

VerifyCsrfToken.php第67行中的TokenMismatchException

我是Laravel的新手,但我认为csrf适用于表格。

您应该将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保护

希望这可以帮助。

这对我有用。 我在网上找到了几个答案,但没有一个单独起作用; 然而,在结合所有之后,我得到了Ajax调用。

  1. 在视图文件的头部,添加以下行:

      // 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:

  

码:

 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数组来从validation过程中删除该路由。