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

Joa*_*epi 8 php ajax jquery 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>'           }
                    ] 
            } );
Run Code Online (Sandbox Code Playgroud)

我的路线如下:

Route::post('/dep/fetch/workers' , 'DepsController@fetch_workers')->name('workerDepData');
Run Code Online (Sandbox Code Playgroud)

我在控制器内部的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;
    }
Run Code Online (Sandbox Code Playgroud)

单击按钮后,我收到一个错误,当我检查来自服务器的响应时,由于ajax请求,我看到一个json文件有异常

Symfony的\分量\ HttpKernel \异常\ HttpException.

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

Ana*_*mov 25

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

为了解决它

1)您可以排除CSRF的URI

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

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


小智 5

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

var _token = $("input[name='_token']").val();
Run Code Online (Sandbox Code Playgroud)

并与其他数据一起传递

data: { _token:_token , etc:etc },
Run Code Online (Sandbox Code Playgroud)

玩得开心 :)