Ваша проблема здесь в том, что когда вызывается success
, i
указывает на последнюю позицию массива, поэтому все ответы добавляются к последнему элементу (и только к последнему, который заканчивает пердур). Это происходит потому, что замыкание, которое success
создает захваты i
, но сама переменная, а не ее текущее значение при определении функции, поэтому все замыкания имеют одну и ту же ссылку на переменную - переменную, которая изменяется л oop. Чтобы предотвратить это, вы можете использовать forEach
вместо for
l oop:
items_to_print.forEach(function(item) {
jQuery.ajax({
url: item.url,
dataType: "json",
data: item.data,
success: function(response, i) {
item.response = response;
}
});
});
Делая это таким образом, для каждого элемента в массиве, который вы вызываете функцией, и поэтому Переменная item
отличается для каждого вызова, поэтому success
может перехватить ее без проблем, поскольку она всегда указывает на один и тот же объект - тот, для которого был сделан запрос.