Асинхронные запросы пожар по порядку, но возвращаются в любом порядке, в котором они заканчиваются в первую очередь. Таким образом, нет уверенного способа пожара, чтобы заставить их закончить одновременно, однако вы можете создавать правила только для запуска кода после возвращения определенных групп.
Например, определите функцию обратного вызова с набором правил и передайте ее каждому обратному вызову для всех ваших запросов ajax.
var completedObject = {};
function groupSuccessCallback() {
// Test for any combination of requirements
if (completedObject.ajax1 && completedObject.ajax2) {
... // Do something that only requires 1 and 2
}
if (completedObject.ajax1 && completedObject.ajax2 && completedObject.ajax3) {
... // Do something that requires all 3 being done
// your data is available at completedObject.ajax#
}
// Or test for _all_ entries for a dynamic count
var allComplete = true;
for(var i in completedObject) {
if (completedObject.hasOwnProperty(i) && !completedObject[i]) {
allComplete = false;
}
}
// Do whatchya need.
if (allComplete) {
alert("bb-b-bb-b-b-b-bbb... that's all folks!");
}
}
Затем установите флаги внутри ваших функций успеха:
// Ajax1
completedObject['anything'] = false; // instantiate a dynamic entry in the object or use an array if you can't use names.
$.ajax({
...,
...,
success: function(data) {
completedObject['anything'] = data || true;
groupSuccessCallback();
}
});
Найдено ReadyX в http://plugins.jquery.com/project/readyx Он утверждает, что она контролирует порядок. Но с 1.4.x это не сработает, так как 'readyList' больше не доступен. –
Объективно, какова ваша проблема с моим решением? –
В этом нет ничего плохого. Проголосовал.Был надеется на некоторую внутреннюю поддержку jQuery. Что-то вроде readyList. Ваше решение работает, но требует касания всех задействованных функций. –