У меня есть таблица, в которой отображаются предстоящие турниры с кнопкой «войти в турнир» в последнем элементе td каждой строки, как показано ниже.
<tbody>
@foreach($tournaments as $tournament)
<tr>
<td>{{ $tournament->name }}</td>
<td>{{ $tournament->start_time }}</td>
<td align="right">1</td>
<td align="right">1</td>
<td>${{ $tournament->prize }}</td>
<td>${{ $tournament->entry }}</td>
<td>
<form class="entertournament" method="POST" action="{{action('EnterTournamentController@enterTournament')}}">
<input type="hidden" name="tournamentid" value="{{ $tournament->id }}">
<button class="btn btn-label-success btn-sm btn-upper btn-submit-entertournament">accept</button>
</form>
</td>
<td>test</td>
</tr>
@endforeach
</tbody>
Ниже приведен javascript, используемый для отправки формы
<script type="text/javascript">
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$(".btn-submit-entertournament").click(function(e){
e.preventDefault();
let form = $(this).closest('form');
console.log(form);
$.ajax({
type:'POST',
url: form.attr('action'),
data: form.serialize(),
success:function(data){
if(data.successful) {
toastr.success(data.successful);
}
}
});
});
</script>
Если я помещу форму за пределы таблицы, форма отправит штраф и отобразит уведомление toastr, которое возвращается из контроллера, как и ожидалось.
Однако при размещении формы внутри элемента td меня перенаправляет на / enterTournament при отправке формы и 419 | страница истекла ошибка отображается.
Затем я включаю @csrf в форму (хотя я думаю, что это странно, потому что я знаю, что у меня есть csrf, указанный в моей голове - следовательно, почему форма отправляется нормально, когда она находится вне таблицы).
Теперь, когда я пытаюсь отправить форму еще раз, меня перенаправляют в / enterTournament, но на этот раз с ответом JSON: {"успешно": "Турнир вошел"}. Это ответ, который должен отображаться в уведомлении toastr без перенаправления страницы при отправке формы.
Есть идеи, почему это происходит, когда форма помещается внутри тега td?
ОБНОВЛЕНИЕ: Если я удаляю класс из элемента таблицы: class = "kt-datatable", он теперь работает как положено. Однако мне нужно, чтобы этот класс был применен к таблице. Кажется немного странным, есть идеи о том, как этот класс вызывает проблемы при отправке формы?