Хитрость заключается в использовании обратных вызовов.Вы делаете один вызов ajax, и при его успешном обратном вызове вы делаете следующий.
Чтобы сделать это, просто добавьте их всех в очередь и оберните вокруг себя обертку, которая отправляет их по одному.
Я написал один несколько дней назад.Я покажу вам реализацию через секунду.
// Buffer class. Has a public append method that expects some kind of Task.
// Constructor expects a handler which is a method that takes a ajax task
// and a callback. Buffer expects the handler to deal with the ajax and run
// the callback when it's finished
function Buffer(handler) {
var queue = [];
function run() {
var callback = function () {
// when the handler says it's finished (i.e. runs the callback)
// We check for more tasks in the queue and if there are any we run again
if (queue.length > 0) {
run();
}
}
// give the first item in the queue & the callback to the handler
handler(queue.shift(), callback);
}
// push the task to the queue. If the queue was empty before the task was pushed
// we run the task.
this.append = function(task) {
queue.push(task);
if (queue.length === 1) {
run();
}
}
}
// small Task containing item & url & optional callback
function Task(item, url, callback) {
this.item = item;
this.url = url;
this.callback = callback
}
// small handler that loads the task.url into the task.item and calls the callback
// when its finished
function taskHandler(task, callback) {
$(task.item).load(task.url, function() {
// call an option callback from the task
if (task.callback) task.callback();
// call the buffer callback.
callback();
});
}
// create a buffer object with a taskhandler
var buffer = new Buffer(taskHandler);
for (i = 0; i < loadingItems.length; i++) {
// title attribute is the URL to get
var ajaxURL = loadingItems[i].attr("title") + '?ajaxPageContent=';
buffer.append(new Task(loadingItems[i], ajaxURL));
}
Извинения за стену кода.Просто реализуйте свои собственные задачи и обработчик.Буфер будет работать до тех пор, пока обработчик вызывает второй аргумент (обратный вызов), когда он завершит обработку задачи.
Затем просто передайте ему задачу и обработчик.Обработчик выполняет ajax и вызывает обратный вызов из буфера, когда возвращается ajax.
Для вашего конкретного примера, если загрузка занимает много времени, то загрузка всех 30. Это займет много времени.ajax - это чтобы сервер выполнял параллельные операциипорядок.Это включает использование $ .ajax и добавление отслеживания порядка каким-либо образом.
Таким образом, сервер сделает это так быстро, как только сможет, и вы сможете настроить его по порядку, как только получите.В качестве альтернативы, если ваши действия выполняются быстро, то постановка их в очередь в буфере не имеет штрафов.