2016-04-26 10 views
1

Я пытаюсь сделать сообщение с ajax до laravel. При использовании метода get он отлично работает, но с POST он терпит неудачу.Laravel 5.2 ajax CSRF

Вот код: на моем app.blade, я поставил:

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

на моем view.blade, я следующий код: АЯКС

$(document).ready(function() { 
    $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
    }); 
    $('#employeeActivityTable').DataTable({ 
     ajax: { 
       url: "{!! route('ajaxactivityperemployee') !!}", 
       type: "POST" 
      }, 
     columns: [ 
      { data: 'employee_id', name: 'employee_id' }, 
      { data: 'employee_name', name: 'employee_name' }, 
      { data: 'month', name: 'month' }, 
      { data: 'sum_task_hour', name: 'sum_task_hour' } 
      ], 
     columnDefs: [ 
      { 
       "targets": [ 0 ], 
       "visible": false, 
       "searchable": false 
      } 
      ] 
    }); 
... 

Я знаю, что мои маршруты работают, потому что у меня было все с GET, и он работал нормально, и я только изменил его на POST, и я попал в инструмент устранения неполадок:

Failed to load resource: the server responded with a status of 500 (Internal Server Error) 

А вот мои маршруты:

//Employee activity 
Route::get('employeeactivity', ['uses'=>'[email protected]','as'=>'employeeactivity']); 

//AJAX 
//Activity per employee 
Route::get('activityperemployee', ['uses'=>'Ajax\[email protected]','as'=>'ajaxactivityperemployee']); 
Route::get('activityperproject', ['uses'=>'Ajax\[email protected]','as'=>'ajaxactivityperproject']); 
Route::post('activityperemployee', ['uses'=>'Ajax\[email protected]']); 

и вот контроллер Аякса:

public function getActivityPerEmployee() 
{ 
    $return = $this->activityRepository->getActivityPerEmployee(); 
    $data = Datatables::of($return)->make(true); 
    return $data; 
} 
public function postActivityPerEmployee(Request $request) 
{ 
    $where = [['col'=>'employee_id','val'=>'13'],['col'=>'month','val'=>'Jan']]; 
    $return = $this->activityRepository->getActivityPerEmployee($where); 
    $data = Datatables::of($return)->make(true); 
    return $data; 
} 
public function getActivityPerProject() 
{ 
    $return = $this->activityRepository->getActivityPerProject(); 
    $data = Datatables::of($return)->make(true); 
    return $data; 
} 

Опять же, если в запросе Ajax, изменить тип с POST на GET, все отлично работает.

+0

показать нам маршрут значит – greener

+0

500 Ошибка, что у вас есть problème на вашем сервере, вы можете показать нам свой маршрут и контроллер действий? – zorx

+0

Проверьте журнал Laravel для получения более подробной информации об ошибке 500. – ceejayoz

ответ

2

Вы пытаетесь отправить запрос на получение маршрута Get.

{!! route('ajaxactivityperemployee') !!}"

Связанные Маршрут:

Route::get('activityperemployee', ['uses'=>'Ajax\[email protected]','as'=>'ajaxactivityperemployee']);

Так что в вашем случае вы можете сделать somehting как это (дать имя вашему почтовому маршруту):

Route::post('activityperemployee','uses'=>'Ajax\[email protected]', 'as'=>'postajaxactivityperemployee']);

, а затем использовать свой новый именованный маршрут при вызове ajax:

{!! route('postajaxactivityperemployee') !!}"

, который будет вызывать postActivityPerEmployee действие

Смежные вопросы