Данные передаются как пустой объект массива json при вызове ajax - PullRequest
0 голосов
/ 04 октября 2018

Я передаю данные 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, используя массив из этой информации.Когда я отлаживаю код, все данные добавляются в массив успешно один за другим.Но когда я проверяю на вкладке сети элемента inspect, данные формы передаются как arrayOfStudentsInfo []: [].Пожалуйста, помогите !!!

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Вы должны измениться - var innerArray = [];к var innerArray = {};

Это должно работать нормально.

0 голосов
/ 04 октября 2018
var innerArray =[];

Это массив.

Массивы предназначены для хранения упорядоченного списка данных с числовыми индексами.

Когда JSON.stringify сериализует массив, он будет только смотреть на числовые индексы.

"StudentId" и т. д. не являются числами.

Если вы хотите использовать именованные свойства, тогда массив неправильный инструмент.

Вместо этого используйте объект.

var innerArray = {};

… и измените имя переменной!


Вы можете упростить свой код, назначив данные вобъектный литерал вместо того, чтобы следовать за ним с кучей отдельных назначений.

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

Обратите внимание, что PHP имеет собственный синтаксис для выражения сложных структур данных в запросе POST.

Если вы поместите объект непосредственно в arrayOfStudentsInfo, тогда jQuery будет сериализовать его в формате, совместимом с этим, PHP автоматически расшифрует его, и вы можете пропустить шаг ручного декодирования JSON в вашем PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...