laravel 5中的简单Ajax Post无法正常工作

时间:2018-01-06 13:29:09

标签: jquery ajax laravel laravel-5

我使用一个非常简单的表单来发送ajax post请求,但它在控制台中显示500 (internal server error),当我点击该链接时,它会打开一个文件并显示错误在此行中

// Do send the request (this may raise an exception)
xhr.send( options.hasContent && options.data || null );

发送请求的页面为demotest.blade.php

接收请求的网址为ajaxpage,并将其转发至AjaxController@postData

这是我的web.php文件

Route::get('/demotest', function(){
    return view('admin/posts/demotest');
});

Route::post('/ajaxpage', 'AjaxController@postData');

这是我的demotest.blade.php文件

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row">

        <form id="myform" method="POST" action="{{ url('/ajaxpage') }}">
            {!! csrf_field() !!}

            <input id="token_field" name="_token" type="hidden" value="{{csrf_token()}}">

            <input id="firstname" type="text" name="firstname" />
            <input type="submit" value="submit" />
        </form>

        <div id="display_here"></div>

        </div>
    </div>
@endsection

@section('jscript')

<script>

    $( document ).ready(function() {

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

        $('#myform').on('submit', function (e) {

            e.preventDefault();

            var firstname = $("#firstname").val();

            $.ajax({
                type: "POST",
                url: "/ajaxpage",
                data:{
                    firstname: firstname,
                    _token: $('#token_field').val()
                  },
                dataType : 'json',
                success: function( data ) {
                    console.log(data);
                    $('#display_here').html(data);
                }
            });

        });
    });

</script>

@endsection

它包含一个字段和提交按钮以及用于发送ajax请求的jquery

这是处理请求的控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class AjaxController extends Controller
{
    public function postData(Request $request)
    {
        return Response()->json($request::all());
    }
}

就是这样。我仍然得到一个错误。请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

如果打开网络检查器并检查XHR请求,您将看到错误响应,因为您在包含请求属性的数组上调用方法all() static。

所以要修复你的错误,而不是

return Response()->json($request::all());

DO

return response()->json($request->all());

或只是为了进行健全性检查:

return response()->json(['success'=>true]);

因此,当您在浏览器上打开控制台时,您应该得到响应。

答案 1 :(得分:0)

您需要使用$request作为表单属性的数组或对象。不需要在表单中使用多个csrf_token。每个会话一个随机的不可语量令牌就足够了。