Witosser
@Witosser
студент IT ВУЗа, увлекаюсь веб-разработкой

Fullcalendar почему создаются дубликаты?

По ссылке пример календаря и скрипт которой я использую.
https://preview.keenthemes.com/html/metronic/docs/...
Я его доработал и добавил в него Ajax запрос:
Иногда (не всегда) создаются дубликаты заявки при обновлении, а сама заявка не меняется. При этом в консоле может отправляться до 4 запросов вместо 1. На бэкенде я сделал проверку и запрет на создание дубликатов, но скрипт как-то его обходит.
Код обновления заявки:
submitButton.addEventListener('click', function (e) {
            // Prevent default button action
            e.preventDefault();

            // Validate form before submit
            if (validator) {
                validator.validate().then(function (status) {
                    console.log('validated!');

                    if (status == 'Valid') {
                        // Show loading indication
                        submitButton.setAttribute('data-kt-indicator', 'on');

                        // Disable submit button whilst loading
                        submitButton.disabled = true;

                        // Simulate form submission
                        setTimeout(function () {
                           let allDayEvent = false;
                            if (allDayToggle.checked) { allDayEvent = true; }
                            if (startTimeFlatpickr.selectedDates.length === 0) { allDayEvent = true; }

                            // Merge date & time
                            var startDateTime = moment(startFlatpickr.selectedDates[0]).format();
                            var endDateTime = moment(endFlatpickr.selectedDates[endFlatpickr.selectedDates.length - 1]).format();
                            if (!allDayEvent) {
                                const startDate = moment(startFlatpickr.selectedDates[0]).format('YYYY-MM-DD');
                                const endDate = startDate;
                                const startTime = moment(startTimeFlatpickr.selectedDates[0]).format('HH:mm:ss');
                                const endTime = moment(endTimeFlatpickr.selectedDates[0]).format('HH:mm:ss');

                                startDateTime = startDate + 'T' + startTime;
                                endDateTime = endDate + 'T' + endTime;
                            }

                            var $crf_token = $('[name="csrfmiddlewaretoken"]').attr('value');
                            $.ajax({
                              url: 'calendar/api/events/' + data.id + '/',
                              headers:{"X-CSRFToken": $crf_token},
                              data: {
                                      "calendar_id": uid(),
                                "route": eventRoute.value,
                                "city": eventCity.value,
                                "location": eventLocation.value,
                                "phone": eventPhone.value,
                                "client": eventClient.value,
                                "entity": eventEntity.value,
                                "is_date": eventIsDate.value,
                                "number_counters": eventNumberCounters.value,
                                "water": eventWater.value,
                                "price": eventPrice.value,
                                "phone_second": eventPhoneSecond.value,
                                "information": eventInformation.value,
                                "creator": eventCreator.value,
                                "start": startDateTime,
                                "end": endDateTime,
                                "all_day": allDayEvent,
                              },

                              type: "PATCH",

                            });
                            e.stopImmediatePropagation(); // to prevent more than once submission
                            // Simulate form submission
                            submitButton.removeAttribute('data-kt-indicator');

                            // Show popup confirmation
                            Swal.fire({
                                text: "Заявка успешно обновлена!",
                                icon: "success",
                                buttonsStyling: false,
                                confirmButtonText: "ОК!",
                                customClass: {
                                    confirmButton: "btn btn-primary"
                                }
                            }).then(function (result) {
                                 submitButton.disabled = false;
                                if (result.isConfirmed) {
                                    modal.hide();

                                    // Enable submit button after loading


                                    // Remove old event
                                    calendar.getEventById(data.id).remove();

                                    // Detect if is all day event


                                    // calendar.refetchResources();
                                    calendar.render();
                            calendar.refetchEvents();


                                    // Reset form for demo purposes only
                                    // form.reset();
                                }


                            });
                             calendar.refetchEvents();

                            //form.submit(); // Submit form
                        }, 200);
                    } else {
                        // Show popup warning 
                        Swal.fire({
                            text: "К сожалению при заполнении возникли ошибки, которые нужно устранить",
                            icon: "error",
                            buttonsStyling: false,
                            confirmButtonText: "ОК!",
                            customClass: {
                                confirmButton: "btn btn-primary"
                            }
                        });
                    }
                });
            }
        },);


Код создания заявки аналогично:
var $crf_token = $('[name="csrfmiddlewaretoken"]').attr('value');
                       $.ajax({
                          url: 'calendar/api/events/',
                          headers:{"X-CSRFToken": $crf_token},
                          data: {
                           "calendar_id": uid(),
                            "route": eventRoute.value,
                            "city": eventCity.value,
                            "location": eventLocation.value,
                            "phone": eventPhone.value,
                            "client": eventClient.value,
                            "entity": eventEntity.value,
                            "is_date": eventIsDate.value,
                            "number_counters": eventNumberCounters.value,
                            "water": eventWater.value,
                            "price": eventPrice.value,
                            "phone_second": eventPhoneSecond.value,
                            "information": eventInformation.value,
                            "creator": eventCreator.value,
                            "start": startDateTime,
                            "end": endDateTime,
                            "all_day": allDayEvent,
                          },
                          type: "POST",
                        });
                        e.stopImmediatePropagation(); // to prevent more than once submission
  • Вопрос задан
  • 23 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы