Как отключить асинхронность?

Добрый день, при загрузке страницы открывается модальное окно, и должны отправляться запросы на мой сервер
Но я столкнулся с проблемой асинхронности.
Как только страница загружается, в зависимости от количества товаров, они все сразу отправляются на сервер, что вызывает ошибку too many requests
let count_checked = 0;
        /*$('#progress-modal').modal('show' , 'keyboard');*/
        $.ajax({
            url: 'plugins/seller_controller.php',
            type: 'POST',
            data: {api: 'unchecked', auth: auth},
            success: function (data) {
                let result = JSON.parse(data);
                if (result['success'] === 1) {
                    $('#progress-modal').modal({
                        keyboard: false,
                        show: true,
                        backdrop: 'static',
                    });
                    let unchecked = result['oreders'].split(',');
                    let accountCount = unchecked_accounts.length;
                    $.each(unchecked_accounts, function (index, value) {
                        $.ajax({
                            url: 'plugins/seller_controller.php',
                            type: 'POST',
                            data: {api: 'check_account', auth: auth, id: value},
                            success: function (data) {
                                let result_json = JSON.parse(data);
                                ++count_checked;
                                $('#progress-bar').css('width', count_checked / accountCount * 100 + '%');
                                $('#account-login').html(result_json['login']);

                                if (count_checked >= accountCount) {
                                    window.location.reload();
                                }
                            },
                        });
                    });
                }
            }
        });

Пробовал выключить asyns во втором запросе, тогда у меня не открывается модальное окно, или страница остается на прелоадере, пока все запросы не отправятся. А результаты должны идти в прогресс бар
  • Вопрос задан
  • 235 просмотров
Решения вопроса 1
@Hess121 Автор вопроса
Проблему решил так
let index = 0;
                    let count_checked = 0;
                    setInterval(function() {
                        if (index === unchecked_accounts.length){
                            window.location.reload();
                        }
                        $.ajax({
                            url: 'plugins/seller_controller.php',
                            type: 'POST',
                            async: false,
                            data: {api: 'check_account', auth: auth, id: unchecked_accounts[index++]},
                            success: function (data) {
                                let result_json = JSON.parse(data);
                                ++count_checked;
                                $('#progress-bar').css('width', count_checked / accountCount * 100 + '%');
                                $('#account-login').html(result_json['login']);
                            },
                        });
                    }, 500);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@EnDronist
Используй лучше:
var responce = await fetch(url, options);
var data = await responce.json(); // Если сервер отправляет ответные данные

Код дождётся выполнения запроса, после чего можешь повторять процедуру, отправляя следующие по списку объекты.
Ответ написан
@AlexanderSek
Верстка, UX/UI
Была похожая проблема когда писал AJAX загрузчик файлов на сервер с индикатором прогресса для каждого файла. Сталкивался с тем что у сервера заканчивались воркеры что бы обрабатывать запросы. Решил проблему таким образом:
function sendRequests(){
    // Проверяем есть ли запросы в массиве запросов
    if (requests_array.length){
        $.ajax(requests_array.shift())
        .done(function(response){
            // Нужные манипуляции если успешно отправилось
        })
        .fail(function(jqXHR, response){
            // Нужные манипуляции еесли ошибка
        })
        .always(function(){
            // Вызываем сами себя пока массив с запросами не станет пустым
            sendRequests();
        });
    }
}
Ответ написан
Ваш ответ на вопрос

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

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