500 Внутренняя ошибка сервера по запросу Ajax.Не уверен в происхождении проблемы - PullRequest
0 голосов
/ 21 декабря 2018

Я получаю 500 Internal Server Error и не могу определить причину проблемы.Этот запрос должен удалить комментарий с определенным идентификатором из базы данных.Идентификатор передается с использованием скрытого ввода.Вот мой код:

Моя форма:

<form method='POST' action=''>
    <input type="hidden" name="comment_id" value="{{ $comment->id }}">
    {{ csrf_field() }}
    {{ method_field('delete') }}
    <button class='submit-btn delete-comment' type='submit' name='commentDelete'>X</button>
</form>

<script>
    var urlDeleteComment = '{{ route('deleteComment') }}';
</script>

Мой маршрут:

Route::delete('/comment', 'CommentsController@deleteComment')->name('deleteComment');

Мой JavaScript:

$('.delete-comment').on('click', function(event) {
    event.preventDefault();
    var commentId = $("input[name=comment_id]").val();

    $.ajax({
        method: 'POST',
        url: urlDeleteComment,
        data: {
            commentId: commentId,
            _token: token
        }
    }).done(function(response) {

    })
});

Мой PHP:

public function deleteComment(Request $request){
    $commentId = $request['commentId'];
    $comment = Comment::find($commentId);
    $comment->delete();
}

После того, как я использую console.log (commentId) в JavaScript, я получаю идентификатор числа, поэтому кажется, что я его успешно получаю.К сожалению, я не уверен, как устранить проблему 500 Внутренняя ошибка сервера.Я просто знаю, что это ошибка на стороне сервера, но я не могу понять, что это такое.

Любая помощь будет оценена.Спасибо.

Я проверил журналы и увидел эту ошибку:

[2018-12-20 22:12:23] local.ERROR: SQLSTATE [23000]: нарушение ограничения целостности: 1048 столбец'user_id' не может быть пустым (SQL: вставить в comments (user_id, image_id, comment, updated_at, created_at) значения (,,, 2018-12-20 22:12:23, 2018-12-20 22:12:23)) {"userId": 1, "email": "bojidar_s_k@abv.bg", "exception": "[object] (Illuminate \ Database \ QueryException (код: 23000)): SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец 'user_id' не может иметь значение null (SQL: вставить в значения comments (user_id, image_id, comment, updated_at, created_at) (2018-12-20 22:12:23, 2018-12-20 22:12:23)) в C: \ MAMP \ htdocs \ Art \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection.php: 664, PDOException (код: 23000): SQLSTATE [23000]: нарушение ограничения целостности: 1048 Столбец 'user_id' не может быть пустым в C: \ MAMP \ htdocs \ Art \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ \Connection.php: 458) [stacktrace]

Теперь странно то, что это не канунn часть функции deleteComment (), а не часть предыдущей функции postComment ().Я решил опубликовать полный код PHP:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Comment;
use App\Image;

class CommentsController extends Controller
{
    public function postComment(Request $request){
        $userId = $request['userId'];
        $imageId = $request['imageId'];
        $commentText = $request['comment'];
        $image = Image::with('user')->find($imageId);

        $comment = new Comment();
        $comment->user_id = $userId;
        $comment->image_id = $imageId;
        $comment->comment = $commentText;
        $comment->save();

        $image->updateComments();

        return response()->json(['comment'=>$comment, 'image'=>$image]);
    }

    public function deleteComment(Request $request){
        $commentId = $request['commentId'];
        $comment = Comment::find($commentId);
        $comment->delete();
    }
}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Для вашей конечной точки удаления ваш вызов ajax должен выглядеть следующим образом:

$.ajax({
    method: 'POST',
    url: urlDeleteComment,
    data: {
        commentId: commentId,
        _method: 'DELETE',
        _token: token
    }
}).done(function(response) {

})
0 голосов
/ 21 декабря 2018

Попробуйте использовать этот код

<form method='POST' id='delete_comment'>
    <input type="hidden" name="comment_id" value="{{ $comment->id }}">
    @csrf
    <div id="status" style="display: none;"></div>
    <button class='submit-btn delete-comment' type='submit' name='commentDelete'>X</button>
</form>

Маршрут:

// POST 
Route::post('/comment/delete', 'CommentsController@deleteComment')->name('deleteComment');

JavaScript:

<script type="text/javascript">  
$(document).ready(function(){

 $('#delete_comment').on('submit', function(event){
  event.preventDefault();
  // ADD WAIT CSS IF YOU WANT HERE :) 
  $.ajax({
   url:"{{ route('deleteComment') }}",
   method:"POST",
   data: new FormData(this),
   // DATA RETURN JSON
   dataType:'JSON',
   contentType: false,
   cache: false,
   processData: false,
   success:function(data)
   {
    // REMOVE YOUR WAIT CSS BEFORE SHOW YOUR SUCCESS MSG

    // SHOW SUCCESS OR WARNING MSG
    jQuery('#status').toggle('show');
    $('#status').addClass(data.status);
    $('#status').innerHTML = data.msg;
   },
   error: function(data) {
    console.log(data);
   }
   });
 });

});
</script>

Контроллер:

<?php
protected function deleteComment(Request $request){
    // NOT GIVE ANY ONE TO DELETE YOUR COMMNET 
    $comment = Comment::find($request->comment_id);
    // CHECK IF IS COMMNET IN DATABASE :) 
    if ($comment) {
        $comment->delete();
        return response()->json([
            'msg' => 'success', 
            'status' => 'alert alert-success'
        ]);
    }
    return response()->json([
        'msg' => 'error, not found', 
        'status' => 'alert alert-danger'
    ]);
}

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...