Если 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 шт):
Во первых, ошибку в 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 пустой прилетит.
- Нужно делать валидацию хотя бы в контроллере!
- Нужно возвращать хоть какое-то значение с контролера.
- 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>
