Предотвращение состояния гонки в асинхронном вызове Ajax - PullRequest
1 голос
/ 20 марта 2020

Я использую Javascript ниже, чтобы перетащить контент в Bootstrap -4 поповер, и я думаю, что у него есть условие гонки:

$(function () {
    $('[data-toggle="popover"]').popover({
        html: true
    ,   content: function () {
            // Pull URL from data-remote-ref of the element that triggered the popover
            var url = $(this).data('remote-ref');
            // Make a temporary element ID for the spinner
            var spinnerId = "loading-id-" + $.now();
            // Initiate an asynchronous Ajax call
            $.get(url, function (data) {
                $('#'+spinnerId).html(data);
            });
            // Return temporary content with the spinner
            return '<div id="' + spinnerId + '">'
                 +     '<div class="spinner-border" role="status">'
                 +         '<span class="sr-only">Loading...</span>'
                 +     '</div>'
                 + '</div>';
        }
    });
});

Этот код запускает Ajax $.get request, а затем возвращает <div id="loading-id-..."> для обработки.

На данный момент $('#loading-id-...') еще не существует, поэтому браузер начинает работу по добавлению его на страницу.

Если Ajax обратный вызов происходит до того, как браузер завершил создание счетчика, $('#loading-id-...') внутри function (data) ничего не даст, поэтому удаленный контент никогда не будет обработан.

Если предположить, что мои предположения верны, и в браузер не встроено специальное «magi c», чтобы предотвратить такие условия гонки, есть ли способ исправить это состояние гонки?

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