Программные средства для интерфейса не предоставляют жесткие коды правильно, значит, ваши коды должны быть расширены без нарушения предыдущей функциональности ..... просто расширения, не редактирующие коды prev
Используйте функцию jQuery $ .when (), чтобы запустить что-то, когда закончились все вызовы ajax:
var async1 = $.ajax({//ajax call 1
url:page1.php,
success: function(data1){
//do something with data1
}
});
....
var async2 = $.ajax({//ajax call 2
url:page2.php,
success: function(data2){
//do something with data2
}
});
$.when(async2, async1).done(function(result2, result1) {
... do this when both are successful ...
});
Добавлено в ответ на вопросы:
Если у вас есть куча вызовов ajax, вы можете использовать «apply» следующим образом:
var results = [];
results.push(async1);
results.push(async2);
... for all the results ...
$.when.apply(this, results).done(function() {
... use 'arguments' array to get results ...
});
Простым решением будет использование модуля PreloaderQ
https://www.npmjs.com/package/preloaderq
Использовать как показано ниже
var preloader = new PreloaderQ()
preloader.setEmptyCallback(function(){
//all tasks are finished
})
preloader.setFirstTaskCallback(function(){
//started first task
})
preloader.enqueueTask('ajax1')
$.ajax({//ajax call 1
url:page1.php,
success: function(data1){
prealoader.dequeueTask('ajax1')
//do something with data1
}
});
preloader.enqueueTask('ajax2')
$.ajax({//ajax call 1
url:page2.php,
success: function(data2){
prealoader.dequeueTask('ajax2')
//do something with data2
}
});
Вызов emptycallback после того, как оба завершены
Это, вероятно, можно сделать очень похоже на то, что вы уже предложили.
Сначала создайте глобальные переменные var sleep = true
и var request_count = 0
. Затем запустите таймер, который проверяет request_count
на общее количество запросов каждую секунду или около того. Затем ваши функции успеха могут увеличивать request_counter
, а затем начинать цикл до sleep == false
. Затем, когда функция мониторинга, запущенная с помощью таймера, обнаруживает request_count == TOTAL_REQUESTS
, она устанавливает sleep = false
, и все ваши функции успеха продолжают об их бизнесе в этой точке.
while(request_count<TOTAL_COUNT) busywork=1;
. Я не думаю, что занятая петля - хорошая идея. Я ошибаюсь?
– Landon
22 January 2013 в 20:22
var async1
должно быть глобальным по масштабам, не так ли? – Landon 22 January 2013 в 20:24async2
находится в цикле, который выполняет динамическое количество раз? В этом случае у меня будет только два экземпляра (переменные) в моем коде с функциями ajax, но я бы хотел, чтобы он выполнял, скажем, 5 аякс-вызовов перед выполнением. Что такое синтаксис для$.when
в этом случае? – Landon 22 January 2013 в 20:42