数据在ajax调用中作为空的json数组对象传递

时间:2018-10-04 08:39:55

标签: javascript jquery ajax

我正在将JSON数据作为参数传递给ajax调用

                  var startDate = dateFormatForSave($("#start_date").val().trim());
                  var arrayOfStudentsInfo = [];

                  var table = $("#selected_students");
                  table.find('tr').each(function(i, el) {
                        var rowId = $(this).attr('id');
                        var actualId = rowId.substr(rowId.indexOf("_") + 1).trim();
                        var routeId = $("#lockedRouteId_"+actualId).text().trim();
                        var stopId = $("#lockedStopId_"+actualId).text().trim();
                        var vehicleId = $("#lockedVehicleId_"+actualId).text().trim();

                        var innerArray =[];

                        innerArray["StudentId"] = actualId;
                        innerArray["RouteId"] = routeId;
                        innerArray["StopId"] = stopId;
                        innerArray["VehicleId"] = vehicleId;
                        innerArray["StartDate"] = startDate;

                        arrayOfStudentsInfo.push(JSON.stringify(innerArray));
                  });


                  $.ajax({
                         url: 'index.php?secController=TransportAllotment&action=saveAllotmentStudentWise',
                         type: 'POST',
                         dataType: 'JSON',
                         data: {
                             arrayOfStudentsInfo:  arrayOfStudentsInfo

                         },
                         success: function (data) {
                                showSwalPopupMessage(data['message'], data['title'], data['result'], true, '?secController=TransportAllotment&action=allotStudentWiseView');
                            }
                         });
                   }});

我首先要收集表中的所有信息,然后使用该信息中的数组创建JSON对象。当我调试代码时,所有数据都成功地一次一个地添加到阵列中。但是,当我在检入元素的网络选项卡中检入时,表单数据像arrayOfStudentsInfo []:[]一样传递。请帮忙!!!

2 个答案:

答案 0 :(得分:3)

var innerArray =[];

那是一个数组。

数组旨在存储具有数字索引的数据的有序列表。

JSON.stringify序列化数组时,它将查看数字索引。

"StudentId"等不是数字。

如果要使用命名属性,则数组不是正确的工具。

改为使用对象。

var innerArray = {};

…并更改变量名称!


您可以通过在对象文字中分配数据来简化代码,而不必遵循一堆单独的分配。

var innerArray = {
    StudentId: actualId,
    RouteId: routeId,
    StopId: stopId,
    VehicleId: vehicleId,
    StartDate: startDate
};

请注意,PHP具有自己的语法,用于在POST请求中表达复杂的数据结构。

如果您将对象直接推入arrayOfStudentsInfo,则jQuery将以与其兼容的格式对其进行序列化,PHP将自动对其进行解码,并且您可以跳过PHP中的手动JSON解码步骤。

答案 1 :(得分:-2)

您应该更改-var innerArray = [];到var innerArray = {};

那应该可以正常工作。