我试图通过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);
}
}
}
答案 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处理此漏洞的方法,您有两种选择:
{!! Form::open(['route' => 'users.add', 'id'=>'form']) !!}
<input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />
在提出请求时提供全局标头:
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
阅读more
答案 2 :(得分:0)
已解决:似乎我一直错过了请求中的id值