@Hitsuzen

Как запретить одновременное выполнение запросов по одному адресу?

Необходимо запретить одновременное выполнение нескольких ajax-запросов по 1 адресу и если во время выполнения 1 запроса нужно сделать ещё 2 - чтобы он вставал в очередь и выполнялся после завершения выполнения 1 запроса. Как обычно это делают "белые люди"?
  • Вопрос задан
  • 1072 просмотра
Пригласить эксперта
Ответы на вопрос 2
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Обернуть $.ajax в свою обертку, которая будет контролировать эти вещи (ставить запросы в очередь, если предыдущий еще не выполнился), и делать ajax только через нее.
Ответ написан
IonDen
@IonDen
JavaScript developer. IonDen.com
Это можно сделать примерно так, используя очередь (демо код):
var queue = [], // тут храним очередь
    active = false; // тут храним инфу об активности

// наша обертка над методом $.ajax
var myAjax = function (config) {
    queue.push(config); // конфиг аякс-запроса кладем в конец очереди
    nextInQueue(); // вызываем следующий элемент в очереди
};

// отправляем запрос
var nextInQueue = function () {
    if (active) {
        return; // если в данный момент идет запрос, то ничего не делаем
    }
    
    active = true; // ставим флаг что запрос активен
    
    // если очередь опустела, ничего не делаем
    if (!queue.length) {
        active = false;
        return;
    }

    // получаем первый элемент очереди
    var current = queue.shift();

    // сам аякс запрос, данные берем из конфига current
    $.ajax({
        url: current.url,
        data: current.data,
        success: function () {
            active = false; // ставим флаг что запрос завершен
            nextInQueue(); // вызываем следующий элемент в очереди
        }
    });
};

// Запрос 1
myAjax({
    data: "1"
});

// Запрос 2
myAjax({
    data: "2"
});

// Запрос 3
myAjax({
    data: "3"
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы