2016-06-15 6 views
1

Как использовать динамические отложенные внутри $ .when? Получена одна функция ajaxFunction, которая возвращает отложенное обещание.

function ajaxFunction(image){ 
    var dfd = $.Deferred(); 
    //Ajax of image 
    return dfd.promise(); 
} 

вызова этого ajaxFunction основанный на динамическом состоянии, как

var defs = {}; 
var someQuerySelector = document.querySelectorAll('image'); 
for (var i = 0; i < someQuerySelector.length; i++) { 
    defs[d + 'i'] = ajaxFunction(someQuerySelector[i]); 
} 

Теперь я хочу, чтобы использовать их в $.when() как использовать defs динамические ключи внутри, как $.when(defs['d1'],defs['d2']). Как использовать динамические переменные в этом. Любые изменения в подходе или помощи будут высоко оценены.

ответ

2

Если изменить defs в массив можно apply() его $.when, как это:

var defs = []; 
var someQuerySelector = document.querySelectorAll('image'); 
for (var i = 0; i < someQuerySelector.length; i++){ 
    defs.push(ajaxFunction(someQuerySelector[i])); 
} 

$.when.apply(this, defs).done(function() { 
    // all complete, do something... 
}); 

или чисто в JQuery:

var defs = $('image').map(function() { 
    return ajaxFunction(this); 
}); 

$.when.apply(this, defs).done(function() { 
    // all complete, do something... 
}); 

Выше в предположении, что вы меняете image к действительный селектор, и что вы предоставляете некоторые параметры вашему ajaxFunction(), в противном случае неоднократно называя его так же, как N раз довольно избыточно.

+0

есть я использую изображение как параметр. Обновленный вопрос также –

+0

Я обновил свой ответ для вас –

+0

$ .when.apply (null, defs) это сработало для меня :) Спасибо за вашу помощь –