JSON .Stringify возвращает пустой массив при строковом массиве объектов - PullRequest
0 голосов
/ 18 января 2020

У меня есть массив, который инициализируется с помощью

var detail = [];
// Have also tried var detail = new Array;

В остальной части моего кода я oop через набор данных, создающий объект следующим образом

while(true) {

   var tempObj = {
      qty : "",
      size : "",
      adr : "",
      dir : ""
   }

   // Some Logic

   tempObj.qty = val;
   tempObj.size = val;
   tempObj.adr = val;
   tempObj.dir = val;

   detail.push(tempObj);
}

Затем, когда я пытаюсь JSON .Stringify моего подробного массива отправить через запрос AJAX, он возвращает пустой массив []. Это также можно увидеть на скриншоте ниже консоли.

Примечание. Отступ внизу, вызывающий прототип как объект, связан с тем, что снимок экрана соответствует объекту, который я пытаюсь отправить на свой сервер. В этом объекте есть другие не основанные на массиве данные. Я хочу преобразовать массив в массив, чтобы он правильно отправлялся на сервер.

enter image description here

Что вызывает такое поведение и как его исправить?

Редактировать 1: Выполнение JSON .stringify (подробно)

var requestObj = {
     field1: “a”,
     field2: “b”,
     field3: “c”,
     data: JSON.stringify(detail)
}

Редактировать 2: Добавить полный блок кода

$("#submit-button").click(function() {
        var reqDate = $("#reqDate").val();
        var wonum = $("#wonum").val();
        var svc = $("#svc").val();
        var complaint = $("#complaint").val();
        var comments = $("#comm").val();
        var detail = new Array;
        var topValid = false;

        $(".tb-rw").each(function() {

            var qty = $(this).find(".quantity");
            var size = $(this).find(".size");
            var adr = $(this).find(".address");
            var dir = $(this).find(".direction");
            var mgk = $(this).find(".mgKey");

            var tempObj = {};

            if(fail == true || topValid == true) {
                alert("Please Make Sure all Inputs are Filled Out");
                return;
            } else {
                //tempArr.push(qty.val(), size.val(), dir.val());
                tempObj.qty = qty.val();
                tempObj.size = size.val();
                tempObj.dir = dir.val();
            }

            findSimilarJobs(adr.val(), mgk.val(), function(data) {
                if(data != "clear") {
                    console.log("FAILED VALIDATION");
                    console.log(data);
                    adr.css('border-color', 'red');
                    alert("Please Make Sure all Addresses are Valid");
                    return;
                } else {
                    //tempArr.push(adr.val());
                    tempObj.adr = adr.val();
                }

                detail.push(tempObj);
            });
        });

        console.log("Preparing to send!");

        var requestData = {
            "requestedDate": reqDate,
            "svc": svc,
            "wonum": wonum,
            "complaint": complaint,
            "comment": comments,
            "data": JSON.stringify(detail)
        };

        console.log(requestData);
        console.log(JSON.stringify(detail));
    });

Ответы [ 2 ]

0 голосов
/ 18 января 2020

ваш tempObj является JSON объектом, и он должен иметь key:value, как показано ниже

while(true) {

   var tempObj = {
      qty : "",
      size : "",
      adr : "",
      dir : ""
   }

   // or you can create empty object 
   //   var tempObj = {};

   tempObj.qty = val;
   tempObj.size = val;
   tempObj.adr = val;
   tempObj.dir = val;

   detail.push(tempObj);
}
0 голосов
/ 18 января 2020

Stringify должен быть в нижнем регистре, как этот stringify, иначе это не будет работать. Так вот, это JSON.Stringify(detail) должно быть это JSON.stringify(detail)

...