Запрос XMLHTTP отправляется несколько раз в Bootstrap Modal

На моей веб-странице у меня есть модальный Bootstrap5, который загружает данные после завершения анимации. Данные верны при первой загрузке, но если я закрою модальное окно, щелкнув X в правом верхнем углу, щелкну кнопку закрытия или щелкну за пределами модального окна и открою модальное окно для другого набора данных (игрока), я иногда получают правильные данные, а иногда неправильные данные.

Модальный:

<!-- Modal -->
            <div class = "modal fade" id = "myModal" tabindex = "-1" role = "dialog" aria-labelledby = "exampleModalCenterTitle" aria-hidden = "true">
              <div class = "modal-dialog modal-dialog-centered" role = "document">
                <div class = "modal-content">
                  <div class = "modal-header">
                    <h5 class = "modal-title" id = "modalTitle">Spielerprofil</h5>
                    <button type = "button" class = "btn-close" data-bs-dismiss = "modal" aria-label = "Close"></button>
                  </div>
                  <div class = "modal-body" id = "modal-body">
                    <form>
                        <div class = "row">
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "summonerName">Summoner Name</label>
                                    <input type = "text" class = "form-control" id = "summonerName" aria-describedby = "summonerName">
                                </div>
                            </div>
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "lineID">LineID</label>
                                    <input type = "text" class = "form-control" id = "lineID" aria-describedby = "lineID">
                                </div>
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "arenaRank">Arena</label>
                                    <input type = "text" class = "form-control" id = "arenaRank" aria-describedby = "arenaRank">
                                </div>
                            </div>
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "rtaRank">RTA</label>
                                    <input type = "text" class = "form-control" id = "rtaRank" aria-describedby = "rtaRank">
                                </div>
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "gkRank">GK</label>
                                    <input type = "text" class = "form-control" id = "gkRank" aria-describedby = "gkRank">
                                </div>
                            </div>
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "bkRank">BK</label>
                                    <input type = "text" class = "form-control" id = "bkRank" aria-describedby = "bkRank">
                                </div>
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "active">Aktiv?</label>
                                    <input type = "checkbox" class = "form-check-input" id = "active" aria-describedby = "active">
                                </div>
                            </div>
                            <div class = "col-6 gx=2">
                                <div class = "form-group">
                                    <label for = "twink">Twink?</label>
                                    <input type = "checkbox" class = "form-check-input" id = "twink" aria-describedby = "twink">
                                </div>
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col-6 gx=2">
                                <label for = "competingLevel" class = "form-label">Competing Level</label>
                                <input type = "range" class = "form-range" min = "1" max = "3" id = "competingLevel">
                            </div>
                        </div>
                        <div class = "row">
                            <div class = "col gx=2">
                                <label class = "form-label" id = "messageBox"></label>
                            </div>
                        </div>
                    </form>
                  </div>
                  <div class = "modal-footer">
                    <button type = "button" class = "btn btn-secondary" data-bs-dismiss = "modal">Schließen</button>
                    <button type = "submit" class = "btn btn-primary" onclick = "savePlayerProfile()">Speichern</button>
                  </div>
                </div>
              </div>
            </div>

Функция, которая обновляет данные:

function loadPlayerProfile(ID){
                var container = document.getElementById("myModal");
                var myModal = new bootstrap.Modal(container);
                console.info(myModal);
                container.addEventListener("shown.bs.modal", function() {
                    var summonerName, arenaRank, rtaRank, gkRank, bkRank, lineID, active;
                    
                    var xhttp = new XMLHttpRequest();
                    xhttp.onreadystatechange = function(){
                        if (this.readyState==4 && this.status==200) {
                    
                            jsonObj = JSON.parse(this.responseText);
                            
                            summonerName = jsonObj.summonerName;
                            arenaRank = jsonObj.arenaRank;
                            rtaRank = jsonObj.rtaRank;
                            gkRank = jsonObj.gkRank;
                            bkRank = jsonObj.bkRank;
                            lineID = jsonObj.lineID;
                            active = jsonObj.active;
                            twink = jsonObj.twink;
                            competingLevel = jsonObj.competingLevel;
                            
                            document.getElementById('summonerName').value = summonerName;
                            document.getElementById('arenaRank').value = arenaRank;
                            document.getElementById('rtaRank').value = rtaRank;
                            document.getElementById('gkRank').value = gkRank;
                            document.getElementById('bkRank').value = bkRank;
                            document.getElementById('lineID').value = lineID;
                            document.getElementById('active').checked = active;
                            document.getElementById('twink').checked = twink;
                            document.getElementById('competingLevel').value = competingLevel;
                        }
                    }
                    xhttp.open("GET", "./utility.php?f=getMemberProfile&id = " + ID);
                    xhttp.send();
                    
                });
                myModal.show();
            }
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я нашел проблему. Я добавлял EventHandler каждый раз, когда нажимал кнопку. Я думал, что EventHandler будет перезаписан. Но вместо этого было добавлено. Поэтому я удалил EventHandler из объекта, прежде чем добавить следующий.

Другие вопросы по теме