2016-08-03 137 views
0

我想用ajax.I提交我的联系表单,我也在meta标签中添加了csrf标记。但是我仍然得到关于头错误500laravel ajax表单提交csrf令牌不起作用

<meta name="csrf-token" content="{{ csrf_token() }}"> 

我laravel路线:

Route::post('/mail',[ 
'uses'=>'[email protected]', 
'as'=>'api.postContact' 

]);

控制器方法

public function postContact(Requests $request) 
{ 

    if(Request::ajax()) { 
     $data = $request::all(); 
     return response()->json([ 
      'data'=>$data 
     ]); 
    } 

    //$contact = new ContactModel($sub, $sender, $email, $body); 
    //ignore the fact that i am not properly utilizing variables as i am testing. 
} 

Ajax调用

$.ajaxSetup({ 
     header:$('meta[name="csrf-token"]').attr('content') 
    }); 
    $.ajax({ 
     url:'http://abounde.com/mail', 
     type:'POST', 
     dataType:'json', 
     data:$(this).serialize(), 
     success:function(data){ 
      if(data){ 
        console.log('submitted ');      
      }else{ 
      //default bg 
        console.log('problem submission '); 

      } 

     }, 
     error: function(data){ 
       console.log(data); 
     } 
    }); 

错误: enter image description here

+0

@ RolfPedroErnst是laravel在类中构建的以返回json响应 –

+0

可能的duplicatea te [Laravel csrf标记不匹配ajax POST请求](http://stackoverflow.com/questions/32738763/laravel-csrf-token-mismatch-for-ajax-post-request) – Danh

+0

错误500通常不是一个标志身份验证失败,这更多的是让服务器停滞的一些代码错误的迹象。你看看ResponseText了吗? – Kjell

回答

0

的问题是,你是不是正确传递您的令牌。 在刀片创建JS变量

var token = '{{Session::token()}}'; 
or 
var token = '{{csrf_token()}}'; 

您还需要设置你的路线

var YOURROUTE = '{{Route("routename")}}'; 

然后在你的app.js做这样的事情:

$.ajax({ 
    method:"post", 
    url:YOURROUTE, 
    data:{ 
    _token:token, //this is very important 
    some_data:some_data, 
    next_data:next_data 
    } 
    }).done(function(msg) { 
    console.log('Your response'+msg); 
    });