console.log может всегда печатать пустой массив, поскольку асинхронный вызов находится внутри цикла for, а во-вторых, к моменту получения ответа от этого вызова эта строка console.log(idList);
уже выполнена. Также асинхронный вызов может element
не принимать элемент в том же порядке, поскольку он будет ожидать получения ответа, и к этому времени element
изменится на другое значение.
Также примите эту строку var store_num = document.getElementById("store").value;
за пределами цикла
Для этого попробуйте создать выражение для немедленного вызова функции и передать element
в качестве параметра
var idList = [];
var store_num = document.getElementById("store").value;
$('.savearray').each(function(index, element) {
(function(x) {
var selectedbox = $(x).val();
$.post("classes/qetitemqty.php", {
ID: selectedbox,
store_num: store_num
})
.done(function(data) {
idList.push(data)
})
}(element))
});
console.log(idList);