У меня возникла проблема с использованием jQuery.when() для ожидания завершения нескольких запросов ajax до вызова другой функции.
Каждый запрос ajax получит данные JSON и выглядит примерно так:
function loadData(arg){
var ajaxCall = $.ajax(
URL // depends on arg
)
.error( .... );
return ajaxCall;
}
Когда запрос вызывается, возвращаемое значение (ajaxCall) добавляется в список, называемый ajaxRequests.
ajaxRequests = [];
ajaxREquests.push(loadData(arg))
Когда все запросы были сделаны, я пытаюсь передать ajaxRequests в $.when, чтобы ждать завершения всех запросов.
var defer = $.when.apply($, ajaxRequests);
defer.done(function(args){
for (var i=0; i<args.length; i++){
inst.loadData($.parseJSON(args[i].responseText));
}
inst.draw();
});
inst - объект, который загружает и рисует графики на основе данных JSON.
Проблема в том, что, похоже, на самом деле не ждет завершения запросов - args [i] - это объект, а responseText - undefined при запуске кода. Если я сохраню args [i] и позже его получаю с консоли, он будет работать.
Я подозреваю, что проблема связана с использованием .when с произвольным количеством аргументов, так как все примеры, которые я видел в Интернете, дают ему предварительно определенный список аргументов.
Я не уверен, что использование приложения было правильной идеей или нет, но в любом случае она не работает должным образом и ведет себя беспорядочно (зависит от браузера).
Любая помощь будет принята с благодарностью.
Пожалуйста, дайте мне знать, если требуется дополнительная информация.
Я использую jQuery 1.5