Laravel 5:Ajax Post 500(内部服务器错误)

Hal*_*nex 6 php ajax jquery laravel laravel-5

我正在尝试通过ajax将数据提交到数据库.提交文章页面没有ajax工作正常.我已添加,console.log()只是为了看看是否有任何事情,但我得到这个错误:

POST http:// localhost/laravel-5/public/articles/create 500(内部服务器错误)

我的代码出了什么问题?是javascript还是控制器?

编辑:我得到了这个 laravel.log

C:\ xampp\htdocs\laravel-5\vendor\laravel\framework\src\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken.php中的异常'Illuminate\Session\TokenMismatchException':53

路线

Route::resource('articles', 'ArticlesController');
Run Code Online (Sandbox Code Playgroud)

调节器

public function store(Requests\ArticleRequest $request)
    {

        $article = new Article($request->all());
        Auth::user()->articles()->save($article);

        $response = array(
            'status' => 'success',
            'msg' => 'Article has been posted.',
        );
        return \Response::json($response);
    }
Run Code Online (Sandbox Code Playgroud)

jQuery的

$(document).ready(function() {
    $('#frm').on('submit', function (e) {
        e.preventDefault();
        var title = $('#title').val();
        var body = $('#body').val();
        var published_at = $('#published_at').val();
        $.ajax({
            type: "POST",
            url: 'http://localhost/laravel-5/public/articles/create',
            dataType: 'JSON',
            data: {title: title, body: body, published_at: published_at},
            success: function( data ) {
                $("#ajaxResponse").append(data.msg);
                console.log(data);
            }
        });
    });
Run Code Online (Sandbox Code Playgroud)

视图

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<h1>Write a New Article</h1>

<hr>

{!! Form::open(['url' => 'articles', 'id' => 'frm']) !!}
    <p>
        {!! Form::label('title', 'Title:') !!}
        {!! Form::text('title') !!}
    </p>

    <p>
        {!! Form::label('body', 'Body:') !!}
        {!! Form::textarea('body') !!}
    </p>

    <p>
        {!! Form::label('published_at', 'Date:') !!}
        {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
    </p>

    <p>
        {!! Form::submit('Submit Article', ['id' => 'submit']) !!}
    </p>
{!! Form::close() !!}

<h3 id="ajaxResponse"></h3>

@if($errors->any())
    <ul>
    @foreach($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="{{ URL::asset('assets/js/ArticleCreate.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)

});

man*_*nix 13

当您通过POST向资源控制器发出请求时,它会自动调用store方法:

Verb    Path        Action  Route Name
----------------------------------
POST    /articles   store   articles.store
Run Code Online (Sandbox Code Playgroud)

所以,你只需要将ajax url更改为:

$.ajax({
        type: "POST",
        url: 'http://localhost/laravel-5/public/articles',
Run Code Online (Sandbox Code Playgroud)

当您需要发送会话令牌时,您可以添加一个全局元标记,例如这是您的网站:

<meta name="csrf-token" content="{{ csrf_token() }}">
Run Code Online (Sandbox Code Playgroud)

然后,只需通过ajax的标头添加令牌:

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

如果您正在使用Form::open()函数(LaravelCollective),它会添加一个隐藏的输入,并将令牌作为名称的值_token.因此,您可以删除元标记并编辑您的ajax标题,如下所示:

$.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('[name="_token"]').val()
        }
});
Run Code Online (Sandbox Code Playgroud)