PHP Laravel:VerifyCsrfToken.php第67行

时间:2016-09-04 11:49:56

标签: php ajax laravel laravel-5

这里的情况是,我想从数据库中获取一些数据并将其显示给用户。当有人提供一些输入并将其保存到数据库时,我会将状态设置为始终" 0"直到有人看到它。因此,无论何时提交输入,用户都会看到弹出屏幕,其中新数据已插入另一页面。这里的问题是当ajax获得了一些状态" 0"它显示为屏幕,但当它无法获取任何值(when all the status value is 1)时,它在控制台中显示错误:

  

TokenMismatchException in VerifyCsrfToken.php line 67

如何解决问题,请提出任何可能的建议?

这是路线:

Route::post('/unread',[
    'uses'=>'ItemController@getUnread',
    'as'=>'unread'
    ]);

Route::post('/s_update',[
    'uses'=>'ItemController@status_update',
    'as'=>'s_update'
    ]);

这是控制器:

public function getUnread()
            {

                $items=DB::select(DB::raw("SELECT count(*) as total from items where status =0"));
                // $data=mysql_fetch_assoc($items);
                 return Response::json($items);
            }       

            public function status_update()
            {
                $items=DB::select(DB::raw("UPDATE items SET status=1 WHERE status=0"));
                return Response::json($items);
            }

这是ajax调用:

  <script type="text/javascript">
                    setInterval(function(){ 
                            $(".container").load("list", function(){
                                $.ajaxSetup({
                                  headers: {
                                      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                                      }
                                 });

                                  $.ajax({
                                    type : "POST",
                                    url : "{{url('unread')}}",                                                             
                                     dataType : 'json',                             
                                    success : function(data) {

                                            $.each(data,function(index,subcatObj){                                                              
                                                if(subcatObj.total != '0')
                                                {
                                                    var yes = confirm('You have '+subcatObj.total+' new messages');
                                                            if(yes){
                                                                status_update();
                                                            }
                                                }

                                        });                             
                                    }, 
    });                                                                  
                        });          
                         }, 3000);  

                         function status_update(){

                           $.ajax({  
                                url:"{{url('s_update')}}",  
                                method:"POST",                                                                  
                           });  
                         }          
                </script>

3 个答案:

答案 0 :(得分:1)

更改此路线

Route::post('/unread',[
'uses'=>'ItemController@getUnread',
'as'=>'unread'
]);

Route::get('/unread',[
'uses'=>'ItemController@getUnread',
'as'=>'unread'
]);

答案 1 :(得分:0)

我认为这是因为你没有在帖子中发送laravel csrf令牌。

您需要发送一个名为&#34; _token&#34;的字段在json中提供的是csrf_token。

见这里:https://laravel.com/docs/5.3/csrf

答案 2 :(得分:0)

  

{{csrf_field()}}

使用它来生成表单中的csrf令牌