Javascript 如何将ajax响应推送到每个输入类的数组中

Javascript 如何将ajax响应推送到每个输入类的数组中,javascript,jquery,Javascript,Jquery,这是我的密码 var idList=[]; $('.savearray')。每个(函数(索引,元素){ //idList.push($(element.val()); var selectedbox=$(元素).val(); var store_num=document.getElementById(“store”).value; $.post(“classes/qetitemqty.php”,{ID:selectedbox,store_num:store_num}) .完成(功能(数据){ i

这是我的密码

var idList=[];
$('.savearray')。每个(函数(索引,元素){
//idList.push($(element.val());
var selectedbox=$(元素).val();
var store_num=document.getElementById(“store”).value;
$.post(“classes/qetitemqty.php”,{ID:selectedbox,store_num:store_num})
.完成(功能(数据){
idList.push(数据);
//推送(JSON.parse(data));
});
});
console.log(idList);
我的数组像这样变空,具有正确响应的长度

[]
  0: "1"
  1: "1" 
  length: 2__proto__: Array(0)

console.log可能总是打印一个空数组,因为异步调用在for循环中,其次,当响应从该调用到达时,这一行
console.log(idList)已执行。此外,异步调用可能
element
的顺序与等待响应到达的顺序不同,此时
element
将更改为另一个值

也取此行
var store\u num=document.getElementById(“store”).value循环外

为此,请创建一个立即调用函数表达式,并将
元素
作为参数传递

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);

console.log可能总是打印一个空数组,因为异步调用在for循环中,其次,当响应从该调用到达时,这一行
console.log(idList)已执行。此外,异步调用可能
element
的顺序与等待响应到达的顺序不同,此时
element
将更改为另一个值

也取此行
var store\u num=document.getElementById(“store”).value循环外

为此,请创建一个立即调用函数表达式,并将
元素
作为参数传递

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);

上面的答案对我来说不起作用,我会通过像这样的映射函数传递数组来解决它

    $(function() {
                    var data2 = $(".savearray").map(function() {
                    return $(this).val();}).get();
                    var obj2 = {};
                    for (var i = 0, l = data2.length; i < l; i++) {
                        obj2[data2[i].value] = data2[i].value;
                    }           

                    idList = [];
                    var store_num = document.getElementById("store").value;

                            $.post("classes/qetitemqty.php", {

                                store_num: store_num,
                                array: data2
                              })
                              .done(function(data) {
                                console.log(data.trim());
                              })


                })
然后在我的例子中回显响应的db查询


感谢您的所有重播

以上答案对我不起作用,我会通过如下映射函数传递数组来解决它

    $(function() {
                    var data2 = $(".savearray").map(function() {
                    return $(this).val();}).get();
                    var obj2 = {};
                    for (var i = 0, l = data2.length; i < l; i++) {
                        obj2[data2[i].value] = data2[i].value;
                    }           

                    idList = [];
                    var store_num = document.getElementById("store").value;

                            $.post("classes/qetitemqty.php", {

                                store_num: store_num,
                                array: data2
                              })
                              .done(function(data) {
                                console.log(data.trim());
                              })


                })
然后在我的例子中回显响应的db查询

感谢您的所有重播

可能的副本。读取Chrome控制台中阵列旁边的
i
图标;它表示“下面的值是刚刚计算的”,即当您打开阵列时,而不是在您记录阵列时。可能是重复的。读取Chrome控制台中阵列旁边的
i
图标;它表示“下面的值是刚刚计算的”,即当您打开数组时,而不是在您记录数组时。