Ajax jquery.min.js:4 POST 500 (внутренняя ошибка сервера) laravel 5

Я получил эту ошибку от вызова Ajax! он получает действие из флажка, а затем отправляет данные с помощью Ajax методу контроллера,

jquery.min.js:4 POST http://localhost:8000/listhotelregisration 500 (Internal Server Error)

Вот часть html кода:

    <div style="display:block">
      <div>My hotel Lists</div>
        @foreach($myLists as $key => $val)
            {{ $val['name'] }
            {!! Form::checkbox($val['name'], $val['id'].','.$value['id']) !!} <br>
        @endforeach
       </div>

Часть Аякса:

 $(function() {
              $("input[type='checkbox']").change(function() {
               var smi  = $(this).val();
                   // alert(smi);
               $.ajax({
                url: 'listhotelregisration',
                type: "post",
                data: {'checko':smi},
                success: function(data){
                  //alert(data);
                }
              });  

   });

Маршрутная часть:

Route::post('listhotelregisration', 'ListhotelController@create');

Часть контроллера:

public function create(Request $request)
{
    $listhotel = new listhotel;
    $data = $request->all();
    $dataPrim = explode(",", $data);

    $listhotel->id_list= $dataPrim[0];
    $listhotel->id_hotel= $dataPrim[1]; 

    $listhotel->save();
    $response = "ok";
    return response ()->json ($response);

}

person H.IHYA    schedule 02.12.2016    source источник
comment
Вопрос по части AJAX. Я не вижу ни одного токена CSRF, отправленного вместе с запросом AJAX. Ошибка 500 может быть связана с тем, что токен CSRF не проверен.   -  person Yi Doe    schedule 02.12.2016
comment
Да, я только что обнаружил, что мне нужно добавить заголовок/ввод csrf-токена, спасибо   -  person H.IHYA    schedule 02.12.2016


Ответы (2)


Ajax в Laravel 5

В основном это связано с промежуточным программным обеспечением VerifyCSRFToken, которое laravel предоставляет нам из коробки. Он отвечает внутренней ошибкой сервера (500), когда в наших запросах возникает несоответствие токенов.

Нам нужно отправить наш запрос AJAX с токеном, отправленным в наш браузер. Токен CSRF в основном хранится в метатеге, но вы можете поместить его куда угодно.

$.ajaxSetup

Установите значения по умолчанию для будущих запросов Ajax

Решение

$(document).ready(function(){
  $.ajaxSetup({
    headers: {
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
    }
  });
});

Надеюсь это поможет.

person Yi Doe    schedule 02.12.2016

ошибка 500 будет означать, что это ошибка сервера. Чтобы точно знать, что пошло не так, вам нужно проверить ответ, который возвращает сервер.

В любом случае я бы уже скорректировал следующие части:

Javascript:

 $(function() {
          $("input[type='checkbox']").change(function() {
           var id_list  = $(this).attr('id_list');
           var id_hotel  = $(this).attr('id_hotel');  

           $.ajax({
            url: 'listhotelregisration',
            type: "post",
            data: {
                    'id_list': id_list,
                    'id_hotel':id_hotel
                  }
             }
       });  
  });

Контроллер:

public function create(Request $request)
{
  $data = $request->only(['id_list', 'id_hotel']);
  $listhotel = listhotel::firstOrCreate($data)
  return response ()->json ("OK");
}
person Frederiek    schedule 02.12.2016