Laravel AJAX 500内部服务器错误,令牌匹配

时间:2016-02-13 21:54:06

标签: ajax laravel

当我提交表单时,我收到此错误并且页面会自动重新加载,但浏览器中的url会显示我在表单中发布的路由和内容。然后,如果我继续提交并再次提交而不重新加载页面它就可以正常工作。可能是因为我没有发布令牌吗?我已将元标记添加到头部。

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

JS:

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

$('#postForm').submit(function(){

    var body = $('#postbody').val();
    var profileId = $('#user_id').text();

        $.ajax({
            type: "POST",
            url: "/post/"+profileId,
            data: {post:body, profile_id:profileId},
            success: function(data) {
                console.log(data);
            }
        });
});

路线:

Route::post('/post/{id}', [
    'uses' => '\App\Http\Controllers\PostController@postMessage',
    'as' => 'post.message',
    'middleware' => ['auth'],
]);

控制器:

public function postMessage(Request $request, $id)
{
    if(Request::ajax())
    {
        $this->validate($request, [
            'post' => 'required|max:1000',
        ]);

            $newMessage = Auth::user()->posts()->create([
                'body' => $request->input('post'),
                'profile_id' => $id
            ]);
    }
}

查看:

<form role="form" action="#" id="postForm">
    <div class="feed-post form-group">
        <textarea class="form-control feed-post-input" id="postbody" name="post"></textarea>
        <div class="btn-bar">
            <button type="submit" class="btn btn-default btn-post"></button>
        </div>
    </div>
    <input type="hidden" name="_token" value="{{ csrf_token() }}"/>
</form>

更新:

因此,日志说&#34; Request :: ajax()不应该静态调用&#34;在我的控制器中。我删除了该代码,现在工作正常。但是,我想知道是否可以删除它,如果有更好的方法来解决这个问题。谢谢!

答案:通过改变

起作用
if (Request::ajax()){
    // code...
}

if ($request->ajax()){
    // code...
}

2 个答案:

答案 0 :(得分:1)

将Request :: ajax()更改为$ request-&gt; ajax()

答案 1 :(得分:0)

你正在做一个AJAX帖子 - 你根本不应该被重定向到任何地方。如果出现错误 - 您只能在浏览器的开发者工具中看到它。

尝试添加:

$('#postForm').submit(function(e) {
    e.preventDefault();
    ...
}

因此浏览器不会发布表单而不是您的AJAX调用。另外,请尝试修复标题大小写:X-CSRF-TOKEN到X-CSRF-Token

此外,您的postMessage()方法根本不返回任何内容。您可能应该在那里通知用户结果或只返回$ newMessage。