так що це моя установка: я закликаю .each на кілька елементів і
після декількох перевірок я посилаю AJAX запит з деякими даними
JSON і на успіх я застосовую відповідь сервера як атрибут для
кожного елемента (як правило id). Після цього натискаю id в
масив.
Проблема в тому, що, очевидно, аякс-запити асинхронні, а
функція, яка використовує масив елементів ідентифікаторів
елементів, перед тим, як всі ajax встигли закінчити.
Я намагався з .when і .then, але функція зворотного виклику
продовжує отримувати звільнені шлях попереду ajax.
Ось як виглядає мій код (я видалив деякі непотрібні
частини):
var order = [];
function sub(selector){
selector.each(function(){
var out = {
"some":"random",
"stuff":"here"
};
$.ajax({
type: "POST"
url: "/test/url",
dataType: 'json',
contentType: "application/json; charset=utf-8",
data:JSON.stringify(out),
success:function(response){
$(this).attr("data-response",response);
order.push(response);
}
})
})
}
$("#button").click(function(){
$.when(sub($(".test"))).then(function() {
console.log(order);
//i have to run the sub function twice so the order doesn't return undefined
});
});