Laravel,无法使用AJAX请求创建对象

时间:2016-10-30 20:24:08

标签: ajax laravel

我在Laravel 5.3上遇到麻烦,特别是从我的JavaScript发布AJAX请求数据,我能够创建一个对象但是当我点击保存方法时我得到500(内部服务器错误)。

这是我的路线:

Route::post('create_comment', 'CommentsController@ajax_store');

这是我的控制者:

public function ajax_store(Request $request)
{
    $comment = new Comment();
    $comment->body = $request->body;
    $comment->post_id = $request->post_id;
    $comment->user_id = auth()->id();
    $comment->save();
    return response()->json(['data' => $comment]);
}

这是我的ajax请求:

$('.comment-submit-button').on('click', function(e) {
    e.preventDefault();
    var body = $(this).closest('form').find('textarea').val();
    var post_id = $(this).data();

    $.ajax({
        method: 'POST',
        url: urlCreateComment,
        data: {
            body: body,
            post_id: post_id
        }
    }).done(function(data) {
        console.log(data['data']);
    });

编辑: 我的导入是在我的索引页面

@push('scripts')
<script>
   var urlCreateComment = '{{ url('create_comment') }}';
</script>

<script src="{{ asset('/js/realtime.js') }}"></script>
<script>
   $.ajaxSetup({
       headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
       }
    });
</script>
@endpush

我的表格:

<form action="{{ url('create_comment') }}" method="post">
    <div class="form-group">
        <textarea placeholder="Write a comment ..." class="form-control" name="body" cols="30" rows="1"></textarea>
    </div>
    <!-- /.form-group -->
    {{ csrf_field()  }}

    <div class="form-group adjust">
        <button data-id="{{ $post->id }}" type="submit" class="comment-submit-button">
            <i class="fa fa-caret-right"></i>
        </button>
    </div>

</form>

编辑: 我收到此错误: 数组到字符串转换(SQL:插入comments ...

编辑:...我解决了,问题是我必须在请求上实现get方法......

$request->get('body');

但是现在我有一个新问题,当我想上传图像时,我通过ajax与Laravel 5.3使用hasFile()方法,它返回null ...为什么?

以前有人有过这样的经历吗?任何见解和建议都会受到赞赏。提前谢谢!

1 个答案:

答案 0 :(得分:1)

JS更改以下内容:

var post_id = $(this).data(); // $request->get('post_id') will produce an array

对此:

var post_id = $(this).data('id');