* Обновлено - НЕ РАБОТАЛО, КАК Я ОЖИДАЛ (см. реальное решение ниже)
Неудачный подход
Я нашел выход, используя eval
... он не полностью протестирован, но кажется, что все в порядке. Пожалуйста, не стесняйтесь публиковать свои комментарии/компромисс.
callAjax
- это метод, который получает URL-адрес и возвращает обещание, такое как return $.ajax(...)
, но, поскольку я должен выполнить его с помощью оператора .when
, я поместил все вызовы в строку, чтобы позже оценить их внутри оператора .when
.
convertAjaxCallsToString = function () {
var result = '';
for (var i = 0; i < ajaxservices.length; i++) {
result += "callAjax(ajaxservices[" + i + "])";
if (i + 1 < ajaxservices.length) {
result += ",";
}
}
return result;
}
Поскольку я не ожидаю более 10 вызовов ajax, я жестко запрограммировал эти 10 ответов (аргументы 0–9), как вы видите ниже... Если я использую только 3 службы ajax, тогда только 3 аргумента должны иметь значение, а остальные будут undefined
и никогда не будет eval, потому что callbacks.length
тоже должно быть 3.
var ajaxcalls = _self.convertAjaxCallsToString();
$.when(eval(ajaxcalls)).done(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
for (var i = 0; i < callbacks.length; i++) {
//If you expect a page response, Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = eval('arg' + i)[0];
callbacks[i](data);
}
});
Возможное решение
вызов ajax не сработал, как я ожидал, поэтому я решил использовать другой подход. Проверено и работает отлично!
$.when(ajax(0), ajax(1), ajax(2), ajax(3), ajax(4), ajax(5), ajax(6), ajax(7), ajax(8), ajax(9))
.done(function (arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) {
for (var i = 0; i < callbacks.length; i++) {
//If you expect a page response, Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = eval('arg' + i)[0];
callbacks[i](data);
}
});
Если ajax возвращает 0, если нет службы ajax для вызова.
var ajax = function (index) {
if (index < ajaxservices.length) {
return callAjax(ajaxservices[index]);
}
return 0;
}
person
Jaider
schedule
24.10.2013