Это можно сделать примерно так, используя очередь (демо код):
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"
});