web-dev-qa-db-fra.com

Erreur Symfony \ Component \ HttpKernel \ Exception \ HttpException lorsque j'ai une méthode de publication sur la route

Je fais une demande ajax avec jquery et je veux envoyer une donnée au serveur (l'id du bouton cliqué) pour que je puisse faire la bonne requête et retourner la bonne réponse. L'idée est qu'après avoir cliqué sur un bouton, je devrais faire l'appel ajax pour demander une table de données. Ma fonction jquery ressemble à ceci:

$('button').click(function(){

                var dep_id =  $(this).attr('id');

                var table = $('#dataTable').DataTable( {

                "processing": true,
                "serverSide": true,
                "ajax": {
                            "url" : '{!! route('workerDepData') !!}'  , 
                            "type" : "POST" ,
                            "data" : { id: dep_id } 
                        },
                 columns: [
                        { data: 'id', name: 'id' },
                        { data: 'worker_name' , name:'name' },
                        { data: 'role', name: 'role' },                     
                        { data: 'dep_name' , name:'dep_id'} ,
                        { data: 'created_at', name: 'created_at' } ,
                        {
                                "className":      "details",
                                "orderable":      false,
                                "data":           null,
                                "defaultContent": '<button class="btn btn-success" id="show">Show</button>'           }
                    ] 
            } );

Mon itinéraire est comme ci-dessous:

Route::post('/dep/fetch/workers' , 'DepsController@fetch_workers')->name('workerDepData');

Ma fonction fetch_workers à l'intérieur du contrôleur a ce code:

 public function fetch_workers()
    {

        $workers =  DB::table('workers')
                    ->where('workers.dep_id' , '=' ,request('id'))
                    ->join('departaments' , 'workers.dep_id' , '=' , 'departaments.id')
                    ->select('workers.id' , 'workers.name as worker_name' , 'workers.role' , 'departaments.name as dep_name' , 'workers.created_at')
                    ->get();
        $ajaxResponse = Datatables::of($workers)->make(true);
        return $ajaxResponse;
    }

Après avoir cliqué sur le bouton, j'obtiens une erreur et lorsque je vérifie la réponse du serveur en raison de la demande ajax, je vois un fichier json qui a une exception à

Symfony\Component\HttpKernel\Exception\HttpException.

Je vérifie ce type d'exception et j'ai vu que c'était dû à un itinéraire utilisant get au lieu de post. Mon itinéraire, comme vous pouvez le voir, utilise la poste, donc je ne comprends pas pourquoi cette exception.

8
Joan Plepi

Comme je l'ai mentionné dans les commentaires. Son [~ # ~] csrf [~ # ~] problème de jeton.

Afin de le réparer

1) Vous pouvez exclure votre URI pour CSRF

2) Vous pouvez mettre csrf_token () dans votre requête ajax.

Des explications détaillées peuvent être trouvées ici https://laravel.com/docs/5.5/csrf

25
Anar Bayramov

Vous devez inclure le jeton CSRF sous forme de lame et méthode de publication.

var _token = $("input[name='_token']").val();

et passer avec d'autres données.

data: { _token:_token , etc:etc },

s'amuser :)

5
ZZA

Dans toutes les dernières version supérieure à 5.6, vous pouvez utiliser comme ceci

<form method="POST" action="YOUR_ACTION">
    @csrf
    ...
</form>
0
DsRaj

Laravel: Pour ceux qui sont confrontés à un problème csrf avec ajax dans laravel

enter image description here

<?php

if(condition){
  
   $updated_field = 'User' ;
   
                $id = $t->updated_value;

                echo '<script type="text/javascript">';
                echo '$(document).ready(function(){ 
           
                var updated_value ='.  $id .';
                //alert(updated_value);
                
                $.ajaxSetup({
                        headers : { "X-CSRF-TOKEN" :jQuery(`meta[name="csrf-token"]`). attr("content")}
                });
                $.ajax({
                  type:"POST",
                  url : "get_username",
                  data : { id: id },
                  success: function(){
                        console.log(data);
                  }
                });

           });';
          echo '</script>';

}

?>
0
Detroit Charan