Ajax请求上出现500 Internal Server Error。不确定问题的根源

时间:2018-12-20 21:38:47

标签: javascript php jquery ajax laravel

我收到500 Internal Server Error(500内部服务器错误),但无法确定问题的根源。该请求应该从数据库中删除具有特定ID的注释。使用隐藏的输入传递ID。这是我的代码:

我的表单:

<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();
}

在JavaScript中使用console.log(commentId)之后,我获得了数字的ID,因此看来我已经成功获取了它。遗憾的是,我不确定如何解决500 Internal Server Error。我只知道这是服务器端错误,但我不知道这是什么。

任何帮助将不胜感激。谢谢。

我检查了日志并看到此错误:

[2018-12-20 22:12:23]本地。错误:SQLSTATE [23000]:违反完整性约束:1048列'user_id'不能为空(SQL:插入comments({{1 }},user_idimage_idcommentupdated_at)值(````,2018-12-20 22:12:23,2018-12-20 22: 12:23)){“ userId”:1,“电子邮件”:“ bojidar_s_k@abv.bg”,“例外”:“ [对象](Illuminate \ Database \ QueryException(代码:23000):SQLSTATE [23000]:完整性约束违反:1048列'user_id'不能为空(SQL:插入created_atcommentsuser_idimage_idcomment,{{1} })值(,,,,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 C:\ MAMP \ htdocs \ Art \ vendor \ laravel \ framework \ src \中的列'user_id'不能为空Illuminate \ Database \ Connection.php:458) [stacktrace]

现在奇怪的是,这甚至不是deleteComment()函数的一部分,而是以前称为postComment()的函数的一部分。我决定发布完整的PHP代码:

updated_at

2 个答案:

答案 0 :(得分:2)

对于您的删除端点,您的ajax调用应类似于:

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

})

答案 1 :(得分:-1)

尝试使用此代码

<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'
    ]);
}

?>