*Актуализиран - НЕ РАБОТИ КАКТО ОЧАКВАХ (вижте истинското решение по-долу)
Неуспешен подход
Намерих изход с помощта на 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 отговора (arg 0 - 9), както виждате по-долу... Ако използвам само 3 ajax услуги, тогава само 3 arg трябва да имат стойност, а другите ще бъдат 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