【发布时间】:2021-02-28 15:26:50
【问题描述】:
我正在处理一个旧的 Laravel 项目 (5.4),我对 Laravel 的 TokenMismatchException 并不陌生。但是,这种情况很奇怪,我尝试了一些我可以做的修复。一个视图中的某个选择字段导致 Laravel 抛出此异常。该字段是使用 Ajax 根据先前的选择输入动态填充的。相同的字段组合在我编辑时完美运行,但在我存储时不起作用。以下是我的代码:
<form action="{{ route('feedback.store') }}" method="post" enctype="multipart/form-data" >
{{ csrf_field() }}
<div class="row">
<div class="col-12">
{{ Form::booleanField('visible', '', '', [], 'Visible') }}
</div>
</div>
<div class="row">
<div class="col-12">
<label for="employee_id">Employee</label><span class="required_field"></span>
<select name="employee_id" id="employee_id" class="form-control">
<option value="">----</option>
@foreach($employees as $employee)
<option value="{{ $employee['id'] }}">{{ $employee['name'] }}</option>
@endforeach
</select>
<br/>
</div>
</div>
<div class="row">
<div class="col-12">
<label for="period_id">{{ translate('Period') }}</label>
<select id="period_id" name="periods_id" class="form-control"></select>
</div>
</div>
...
这里是填写句点字段的 Ajax 函数:
$('#employee_id').on('change', function () {
let id = $(this).val();
if(id == null){
return;
}
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
url: '/performance/employee-period/'+ id,
type: 'GET',
success: function (data) {
let select = $('#period_id');
select.html(null);
select.append(new Option('---', ''));
$.each(data, function (key, value) {
let option = new Option(value.period.start_date + ' - ' + value.period.end_date, value.period.id);
select.append(option);
})
},
});
});
商店的路线受到我用于所有其他路线的相同中间件的保护,它们不会引起任何问题。我正在扩展的布局中有一个包含 csrf 令牌的元数据。 如果我提交时没有选择期限,则请求直接通过。 这可能很愚蠢,但我浪费了大约 2 小时试图解决它而无济于事,因此不胜感激。
【问题讨论】: