Laravel 5 AJAX提交内部服务器错误500

时间:2015-09-18 19:14:43

标签: jquery ajax laravel internal-server-error

我已经在网上搜了几个小时试图解决这个问题。我是AJAX的新手。因此,在尝试将数据提交给控制器时,我在控制台中收到内部服务器500错误。我认为这是一个CSRF不匹配,但我已经尝试了所有我能想到的解决方案。我在layout.blade.php中使用了meta标签方法来提交AJAX CSRF。

<meta name="csrf-token" content="{{ csrf_token() }}">

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

我的评论代码如下所示。我将$p->id传递给路线,路线传递给控制器​​。

@if(Auth::check())
    {!! Form::model($p, ['route' => ['new_comment.post', $p->id]]) !!}
        <div class = "comment submit">
            <textarea id = "comment_content" placeholder = "Your comment goes here!" name = "comment_content" class = "content_display comment"></textarea>
        </div>

        <div class = "action">
            <li><a class = "comment_button new" href = "#"><i class = "fa fa-check"></i></a></li>
        </div>
    {!! Form::close() !!}
@else
    <p><a href = "/login">Log in to post a comment</a></p>
@endif

我的AJAX:

<script>
$('.comment_button.new').click(function(e) {
    e.preventDefault();

    var comment_content = $('#comment_content').val();
    var data = 'comment_content'+comment_content;
    var url =  window.location.pathname;

    $.ajax({
        type : "POST",
        url : url,
        data : data,
        success:function(data){
            alert(data);
        },
        error:function(){ 

        }
    });
    return false;
});

</script>

我的路线:

Route::post('/home/view/{id}', ['as' => 'new_comment.post', 'before' => 'csrf', 'uses' => 'ViewPost@new_comment']);

我的控制器:

class ViewPost extends Controller
{

public function show($id)
{
    $posts = Posts::where('id', '=', $id)->get();
    $comments = Comments::where('post_id', '=', $id)->get();
    return view('view')->with('posts', $posts)->with('comments', $comments);
}

public function new_comment(Request $request, $id)
{
    $comment_postID = $id;
    $comment_data = $request->input('comment_content');

    if($request->ajax()) {
        $com = new Comment;
        $com->post_id = $comment_postID;
        $com->comment_content = $comment_data;
        $com->save();
    }
}


}

修改

以下是问题http://pastebin.com/tNcN5bLP

的堆栈跟踪

解决

我的“评论”模型正在使用“评论”进行调用。我通过添加一个s来修复它。 Woops!

此外,

我使用AJAX不正确地发布数据,因此我的控制器无法读取输入。来自我的AJAX的这个片段

var data = 'comment_content'+comment_content;
data : data,

应该是

data : {comment_content:comment_content},

谢谢!

1 个答案:

答案 0 :(得分:0)

在主模板中尝试以下内容(您为每个新页面始终扩展的模板):

    <script>
        $(document).ready(function() {

                        $.ajaxSetup({
                            headers: {
                                'X-CSRF-TOKEN': "{{ csrf_token() }}"
                            }
                        });
        });
    </script>

确保它是刀片模板,以便正确处理牙箍。

此外,尝试启用dubug模式并检查响应,以确保它不是完全不同的东西,如果你用问题的完整堆栈跟踪更新答案,它会更容易帮助。