Если ajax запрос в параметре success выходит на else где искать ошибку laravel

Такой вопрос, работаю в laravel и у меня есть таблица в БД. Все ячейки таблицы не обязательны к заполнению, но когда пытаюсь отравить на половину заполненную форму пишет :

POST http://public/new_comment 500 (Internal Server Error)

Если заполняю все в форме, то выходит на else в ajax success. Что делать, вот код ajax:

        let userId = $('#userId').val()
        let companyId = $('#companyId').val()
        let name = $('#name').val()
        let INN = $('#INN').val()
        let informC = $('#inform').val()
        let nameDirec = $('#director').val()
        let addressC = $('#address').val()
        let phoneC = $('#phone').val()
        let _token = $('input[name=_token]').val()

        $.ajax({
            url: "{{route('createComments')}}",
            type: 'POST',
            data: {
                'userId': `${userId}`,
                'companyId': `${companyId}`,
                'name': `${name}`,
                'INN': `${INN}`,
                'informC': `${informC}`,
                'nameDirec': `${nameDirec}`,
                'addressC': `${addressC}`,
                'phoneC': `${phoneC}`,
                '_token': `${_token}`,
            },
            success: function (response) {
                if (response) {
                    console.log('BAN!');
                    setTimeout(goHome, 2000);
                } else {
                    console.log('Ошибка');
                }
            }
        });

Маршрут в web.php

Route::post('/new_comment', 'App\Http\Controllers\AjaxCommentsController@ajaxComments')->name('createComments');

Контроллер:

class AjaxCommentsController extends Controller
{
    public function ajaxComments(Request $request){
        $comments = new Comments();
        $comments->idUser = $request->userId;
        $comments->idCompany = $request->companyId;
        $comments->comName = $request->name;
        $comments->comINN = $request->INN;
        $comments->conInform = $request->informC;
        $comments->comNameDirec = $request->nameDirec;
        $comments->comAddress = $request->addressC;
        $comments->comPhone = $request->phoneC;
        $comments->save();
    }
}

Таблица в БД: введите сюда описание изображения

Но как я понимаю, если всё таки мне выводит else в ajax это означает, что всё правильно подключено.


Ответы (3 шт):

Автор решения: Diefair

Во первых, ошибку в ajax запросе надо отлавливать через error. То есть, у вас должно быть

success: function(response){},
error: function(error){}

Тогда в success будет входить, когда 200 код ответа, в а error - во всех других случаях.

Во вторых, я бы переписал сохранение так

public function ajaxComments(Request $request){
        $comments = new Comments();
        $rows = $request->input();
        foreach ($rows as $key => $value) {
            $comments->$key = $value;
        }
        $comments->save();
    }
→ Ссылка
Автор решения: Павел Кулик

Все правильно у вас работает. Контроллер ничего не возвращает значит response в success пустой прилетит.

→ Ссылка
Автор решения: Sanya H
  1. Нужно делать валидацию хотя бы в контроллере!
  2. Нужно возвращать хоть какое-то значение с контролера.
  3. 500 ошибку выдает, т.к. Вы в контроллере обращаетесь к свойствам Request-а, которых не передали. Нужно или проверять наличие или устанавливать по умолчанию, или назначать только те, которые прилетели

<?php
    public function ajaxComments(Request $request, Comments $comments){
        $request->validate([
            'userId' => 'required|exists:users',
            'companyId' => 'required|exists:companies',
            'name' => 'nullable|string|min:3|max:50',
            ...
        ]);
        $rows = $request->all();
        foreach ($rows as $key => $value) {
            $comments->$key = $value;
        }
        $comments->save();

        return Response::json(array(
                'success' => true,
                'data'   => $comments
            )); 
    }
?>


<script>
    // и где в ajax прилетают данные
    success :function({success}) {
        if (success) {
            console.log('BAN!');
            setTimeout(goHome, 2000);
        } else {
           console.log('если когда-то вернется false');
        }
    },
    error: function(e) {
        console.log(e.responseText);
    }
</script>

→ Ссылка