Как я могу вставить ответ AJAX в массив для каждого входного класса - PullRequest
0 голосов
/ 06 ноября 2019

это мой код

var idList = [];
$('.savearray').each(function(index, element) {
  //idList.push($(element).val());
  var selectedbox = $(element).val();
  var store_num = document.getElementById("store").value;

  $.post( "classes/qetitemqty.php", { ID: selectedbox, store_num: store_num})
    .done(function( data ) {
      idList.push(data);
      //idList.push(JSON.parse(data));                          
    });
});


console.log(idList);

мой массив становится пустым, как этот пут, имеет длину с правильным ответом

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

вышеупомянутые ответы не работают для меня, я решаю это путем передачи массива через функцию карты, например

    $(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());
                              })


                })

, а затем выполняю цикл в php для каждого типа

foreach($array as $value){....}

затем повторить ответ в моем случае его запрос БД

спасибо за все ваши повторы

0 голосов
/ 06 ноября 2019

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...