2016-08-03 8 views
0

Я пытаюсь отправить свою форму контакта с помощью ajax.I добавил токен csrf внутри метатега тоже. Однако я все еще получаю ошибку 500.laravel ajax form submit csrf token не работает

на заголовке

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

Аякса вызов

$.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

Возможная дублика 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); 
    });