Почему мои события нажатия jQuery не вызываются при вызове изнутри панели обновлений (ASP.NET Web Forms)? - PullRequest
0 голосов
/ 09 июня 2018

Я работаю над поиском неуловимой ошибки в IE11 и Edge.Я заметил разницу в сетевых вызовах между Chrome и Edge, и я не уверен, является ли это разницей между тем, как инструменты разработки браузеров отображают трафик, или это указывает на то, что в Edge что-то действительно происходит,t в Chrome.

На следующем снимке экрана показаны инструменты разработчика в Edge, записанные во время загрузки страницы.Networks tab in Edge shows login request

Похоже, что какой-то запрос к серверу не считается аутентифицированным, поэтому он перенаправляется на страницу входа.Та же последовательность загрузки страниц в Chrome не показывает этого - у нее только один запрос страницы.Мой первый вопрос - есть ли способ отследить, какая вещь выполняет этот конкретный запрос, используя инструменты Edge dev?Или это то, о чем мне нужно вообще беспокоиться, если это ожидаемое поведение?

Некоторые сведения об ошибке, которую я пытаюсь устранить

Страница использует UpdatePanels и jQuery ajaxоба делать запросы на сервер.Соответствующие вызовы jQuery ajax выполняются в событиях щелчка, запускаемых на объектах внутри панелей обновления.Я убедился, что эти события щелчка не вызывают обратную передачу.Кажется, что обработчики щелчков выполняются очень хорошо (большую часть времени), но ошибка в том, что иногда они вообще не выполняются - ни один из моих операторов console.log не появляется в консоли, и ничего не происходит (кроместраница немного подпрыгивает) пока не нажмете снова.Каждый второй щелчок, кажется, работает.Похоже, это происходит, когда на страницу загружено много данных (обратите внимание на время загрузки для первого запроса в инструментах разработки).

Я удостоверился, что перепривязать кликсобытия, которые находятся на объектах внутри панелей обновлений после каждой обратной передачи панели обновлений с использованием

Sys.WebForms.PageRequestManager.getInstance().add_endRequest

. Сайт использует проверку подлинности на основе форм.На сайте, на котором я тестирую, есть только один сервер - балансировщик нагрузки не задействован.

Также - прежде чем кто-либо это предложит - мы пытаемся отойти от панелей обновлений, но мы не совсем готовы удалить эту страницу, которая сильно зависит от них.Это было бы и моим предпочтительным решением:)

1 Ответ

0 голосов
/ 09 июня 2018

Вы упоминаете, что соответствующая веб-страница является большой.
Из-за этого загрузка по JavaScript не всегда будет завершена, когда вы сделаете первый быстрый щелчок по такой гиперссылке / кнопке на стороне клиента, что означает, что обычный httpЗапрос GET запускается, что вы видите в инструментах разработчика.
Вы также увидите это в других браузерах.

Попробуйте найти способ отключить эти клиентские гиперссылки / кнопки до завершения загрузки.

Вы можете отключить их изначально с помощью:

<a class="clientsideButton" href="#" onclick="javascript:return false">click here</a>

и включить их впоследствии.
Не забудьте также повторно связать их снова после частичной обратной передачи!

<script>
$(function() {
    $(".clientsideButton").on("click", 
        function() { 
            // Make AJAX request.
    });
});
</script>
...