我在路由上使用post方法时出现Symfony \ Component \ HttpKernel \ Exception \ HttpException错误

时间:2017-09-12 23:26:28

标签: php jquery ajax laravel

我正在使用jquery执行ajax请求,我想将一个数据发送到服务器(单击按钮的id),这样我就可以进行正确的查询并返回正确的响应。我的想法是,在单击按钮后,我应该进行ajax调用以请求数据表。 我的jquery函数如下所示:

$('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>'           }
                    ] 
            } );

我的路线如下:

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

我在控制器内部的fetch_workers函数有以下代码:

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

点击按钮后,我收到一个错误,当我因为ajax请求检查服务器的响应时,我看到一个json文件在

处有异常
  

的Symfony \元器件\ HttpKernel \异常\ HttpException。

我检查了这种异常,我看到它是由于使用get而不是post的路由。你可以看到我的路线是使用帖子所以我不明白为什么这个例外。

4 个答案:

答案 0 :(得分:24)

正如我在评论中提到的那样。其 CSRF 令牌问题。

为了解决这个问题

1)您可以排除CSRF的URI

2)您可以将csrf_token()放入您的ajax请求中。

详细解释可以在https://laravel.com/docs/5.5/csrf

找到

答案 1 :(得分:5)

您必须同时以刀片形式和post方法添加CSRF令牌。

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

并与其他数据一起传递。

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

玩得开心:)

答案 2 :(得分:0)

Laravel:对于那些在laravel中使用Ajax遇到csrf问题的人

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>';

}

?>

答案 3 :(得分:0)

在5.6以上的最新版本中,您可以像这样使用

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