Используйте систему очередей.Где-нибудь есть массив, в который вы добавляете структуру URL / данных (в основном очередь заданий), а также переменную, которая помечает, когда запрос ajax является ожидающим.После того, как вы поместите свои todo-данные в массив, вызовите функцию (doNextAjax ()?), Которая проверяет состояние флага и инициирует запрос ajax, если нет невыполненной работы.Если есть незавершенное задание, функция просто возвращает.
В обработчике успеха вызова ajax просто вызовите эту функцию doNextAjax (), чтобы инициировать следующий вызов ajax.
Это должнопозвольте вам симулировать синхронные запросы, не связывая браузер, как это делают реальные синхронные запросы.
ок.некоторый пример кода.вероятно, не будет работать, так как я схожу с головы, но ...
var jobQueue = [];
var ajaxActive = false;
function addToQueue(url, data) {
jobQueue.push({'url' : url, 'data': data});
doAjax();
}
function doAjax() {
if (ajaxActive) { return; } // ajax request still outstanding
if (jobQueue.length = 0) { return; } // no more work to do
todo = jobQueue.pop();
ajaxActive = true;
$.ajax({
url: todo.url,
data: todo.data,
success: function(returnedata) {
... do whatever you need with the returned data ...
ajaxActive = false;
doAjax(); // schedule another job, if need be.
},
error: function(e) {
... handle error ...
ajaxActive = false;
doAjax(); // schedule next job, if need be
}
});
}