我正在将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 []:[]一样传递。请帮忙!!!
答案 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 = {};
那应该可以正常工作。