Laravel POST通过Ajax

时间:2017-07-16 20:37:09

标签: php ajax laravel

我试图通过ajax提交表单,但我总是收到内部服务器错误

这是我的表单代码

{!! Form::open(['route' => 'users.add', 'id'=>'form']) !!}
<!-- Solo moderador -->
<div class="card-panel">
    @if(Auth::user()->permision->request == 1)
        <p class="center">Observaciones del moderador:</p>
        <textarea type="textarea" class="materialize-textarea" name="observations" id="updateObservations"></textarea> 
    @else
        <div class="center">
            <input type="checkbox" id="userVerify" class="filled-in">
            <label for="userVerify">Problema solucionado :)</label>
        </div> 
    </div>
    @endif 
{!! Form::close() !!}

这是我的路线

Route::post('request/update', 'RequestsController@postUpdateRequest')->name('request.update');

这是我的Ajax方法

$.ajax({
    type: "post",
    dataType: "html",
    url: 'request/update',
    data: $("#form").serialize(),
    success: function (response) {
        // write here any code needed for handling success         
        console.log("se envio");
    }
});

这是我在控制器中的方法

public function postUpdateRequest(Request $request)
{
    if($request->ajax())
    {
        // Obteniendo registro de la petición
        $petition = Petition::where('id', $request->id)->first();

        // Guardando
        $petition->fill($request->all());
        $auditConfirm = $petition->isDirty();
        $petition->save();

        // Guardando registro de auditoría
        if($auditConfirm){
            AuditsController::postAudit($this->action_id_update);
        }
    }

}

编辑:This is the console output

3 个答案:

答案 0 :(得分:0)

在表单中加入:

 echo Form::token();

基本上Laravel期望CSRF令牌,中间件确保从表单发送的令牌与之前创建的令牌匹配。

如果您不想在论坛上添加,可以在AJAX设置中添加:

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

..并在HTML页面标题中显示:

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

答案 1 :(得分:0)

您错过了CSRF令牌,Laravel有一种通过middleware处理此漏洞的方法,您有两种选择:

  1. 以html格式添加csrf令牌:
  2. {!! Form::open(['route' => 'users.add', 'id'=>'form']) !!} <input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />

    1. 在提出请求时提供全局标头:

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

    2. 阅读more

答案 2 :(得分:0)

已解决:似乎我一直错过了请求中的id值