Laravel отправить форму с ajax не работает внутри тега td - PullRequest
0 голосов
/ 06 июня 2019

У меня есть таблица, в которой отображаются предстоящие турниры с кнопкой «войти в турнир» в последнем элементе 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>&nbsp;
                 </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", он теперь работает как положено. Однако мне нужно, чтобы этот класс был применен к таблице. Кажется немного странным, есть идеи о том, как этот класс вызывает проблемы при отправке формы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...