2016-08-03 55 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); 
    });