@Etmac

Почему возникает ошибка 500 при отправке запроса через ajax?

Решил попробовать создать динамически запись с помощью ajax , получилось , но с костылями как мне кажется. Дальше я хотел подтянуть валидацию для записи, но на этом моменте возникла ошибка POST localhost:8000/create 500 (Internal Server Error). Кстати , до валидации мне уже казалось что мой код уже как-то странно работает, допустим в методе контроллера, в начале я написал exit('works') , чтобы просто проверить выполняется ли запрос на мой url, раньше это работало - скрипт просто обрывался с этим сообщением, но теперь сообщение отобразился в консоле при методе .done() , по идее код должен был дойти до контроллера и скрипт должен был выполнится там- и как бы это показалось довольно странным , не злитесь если для вас это очевидно :) Плюс еще в .done() я добавляю в тэги данные, которые пришли в json , если я этого не пишу , то данные появляются только при обновлении страницы, с этим всё нормально или нет ?)
Немного погуглив, я нашел решения, в основном все писали про то , что нужно передавать токен в заголовках вот так:
$.ajaxSetup({
                 headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
                });

Но это не помогло, пробовал смотреть мои логи /var/log/apache2/error.log - ничего военного не нашел. Скорее всего я как-то не так использую ajax. Вот весь код
$(document).ready(function() {
            $(".interaction").find("#create").on("click", function() {
                 $("#create-modal").modal();
            });

            $('#modal-save').on('click', function() {

                var token = '{{ csrf_token() }}';
                var url = '{{ route('create.post') }}';
                $.ajaxSetup({
                     headers: {
                        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                    }
                });

                $.ajax({
                    method: 'POST',
                    url: url,
                    data: {header: $("#post-header").val(), body: $("#post-body").val(), _token: token},
                   
                }).done(function (msg) {
                     console.log(JSON.stringify(msg));
                    $("#posts").append("<h2>" + msg.title +"</h2>");
                    $("#posts").append("<p>" + msg.body + "</p>");
                    $("#create-modal").modal('hide');

                }).fail(function( jqXHR ) {
                    if (jqXHR.status == 422) 
                    {
                        console.log('It doestn't works');
                    }
                });
             });
        });

Все это оборачивается в @section('content') и наследует мой master шаблон , где в header я подключаю скрипты для этого
<script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44=" crossorigin="anonymous"></script>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>


Route::post('/create', ['uses' => 'PostController@createPost', 'as' => 'create.post']);
- Вот на этот урл я всё отправляю , а в методе createPost пишу следующее:
$post = new Post;

   $validator = Validator::make($request->all(), [
      'header' => 'required|unique:posts|min:5|max:100',
      'body'  => 'required|max:200'
    ]);

   if ($validator->fails()) {
      return response()->json(['errors' => $errors], 422);
   }
   $post->title = $request['header'];
   $post->post_body = $request['body'];
   $post->user_id = 1;
   $post->save();

    return response()->json([
      'title' => $post->title,
      'body' => $post->post_body,
      ]);


Кому этой инфы мало , если что вот ссылка на весь проект https://www.dropbox.com/sh/zufx3bhusbjhni3/AADzrOF... .
Заранее спасибо!
  • Вопрос задан
  • 2810 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bitw
web-dev
в storage/logs/laravel.log посмотрите текст ошибки

вполне возможно что с данными на сервер необходимо еще передать _method: 'метод'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы