Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.08.2023, 11:46
Новичок на форуме
Отправить личное сообщение для alex_ural Посмотреть профиль Найти все сообщения от alex_ural
 
Регистрация: 06.04.2014
Сообщений: 8

затяжной ajax XMLHttpRequest
Привет всем.
У меня request
$('#installForm').on('beforeSubmit', function (event){
    event.preventDefault();
    $('#submitButton').prop('disabled', true);
    $('#back-button').hide();
    $('#install-note').toggle();
    $('.performance-svg').toggle('slow');

    var progressBar =$('.progress-bar');

     function sleep(ms) {
        return new Promise(resolve => setTimeout(resolve, ms));
    }
   async function prBarTimer(t, p) {
        if(p>t) {
            for(let t=1; t < p; t++){
              await sleep(500);
              setPercent(t);
            }            
        }
        function setPercent(t) {
            progressBar.css('width', t+'%' );
            progressBar.text(parseInt(t)+'%' );
        }
    } 
    
    var formData =  $('#installForm').serialize();
    var xmlReq = $.ajax({
           type: "POST",
           url: "{$url}",
           xhr: function() {
           var xhr = new window.XMLHttpRequest();
           
            xhr.onreadystatechange = function(){
                if (xhr.readyState == 1) {
                    $('.progress').toggle();
                    prBarTimer(0, 80);
                }
            };
            xhr.onloadend =function(e) {
                   prBarTimer(80, 100);
                   location.href="{$url_upgrate}"
            }
            return  xhr;
        }
    });
});
Я ожидаю, что onloadend запустится prBarTimer(80, 100); Но на самом деле срабатывает location.href. Cкажите пожалуйста, почему так?

Последний раз редактировалось ksa, 14.08.2023 в 12:26. Причина: форматирование кода
Ответить с цитированием
  #2 (permalink)  
Старый 14.08.2023, 12:11
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,592

Ну потому что ты не ждёшь (await) prBarTimer, location.href устанавливается практически одновременно. А когда установлена новая location.href, браузер имеет право игнорировать старую страницу, т.к. с его точки зрения она уже в мусоре.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ajax запрос через метод submit() n0kkw1n AJAX и COMET 7 16.12.2016 22:47
Отправка формы после ajax проверки ShutTap Общие вопросы Javascript 15 08.04.2016 11:46
jQuery Ajax - XMLHttpRequest Infinity178 jQuery 3 15.12.2015 22:23
Объект ajax и приостановка функции kilohertz_. AJAX и COMET 5 18.01.2015 16:33
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57