Передача дополнительных данных с помощью формы Yii2 через ajax - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть следующий вызов ajax для отправки формы Yii2:

var form = $("#purchase-order-form");
$.ajax({
    url: form.attr('action'),
    data: form.serialize(),   
    type: 'post',
    success: function(data) {
         $('#modal').modal('hide');
         callNotify(data);
     }
});

Это работает нормально, однако у меня есть дополнительные данные, которые мне нужно передать вместе с данными формы. Это строка с кодировкой json, которую я создал, вызывая JSON.stringify в созданном мной массиве.

Я попытался использовать .serializeArray() вместо .serialize() и вставить дополнительный контент в форму, например:

var form = $("#purchase-order-form");
var table-data = tableToJson('.products-table');
var data = form.serializeArray();     
data.push({table: table});

$.ajax({
    url: form.attr('action'),
    data: data,   
    type: 'post',
    success: function(data) {
         $('#modal').modal('hide');
         callNotify(data);
     }
});

Когда я вижу консоль, содержимое находится в конце массива, но в моем контроллере оно передается как неопределенное.

Я думаю, что yii обрабатывает данные, не принадлежащие модели, прежде чем разрешить мне их загрузить.

Как я могу передавать данные вместе с формой, в то же время имея возможность загружать модель, используя $model->load()?

1 Ответ

0 голосов
/ 14 сентября 2018

Вы должны добавить дополнительные данные с индексами name и value, где name содержит имя переменной для публикации, а value - значение переменной, которую вы хотите добавить

{name: 'data', value: data}

Но прежде чем я предложу реальный код, у вас есть несколько вещей, за которыми вы должны следить, вы не можете назвать переменную, содержащую -, как вы объявили var table-data = tableToJson('.products-table');

Дефисы могут быть ошибочно приняты за попытки вычитания.Дефисы не допускаются в именах JavaScript.

Затем вы присваиваете data.push({table: table});, тогда как нет переменной с именем table.

Таким образом, ваш полный код должен выглядеть как

var form = $("#purchase-order-form");
    var tableData = tableToJson('.products-table');
    var data = form.serializeArray();     
    data.push({name: 'table', value:tableData});

    $.ajax({
        url: form.attr('action'),
        data: data,   
        type: 'post',
        success: function(data) {
             $('#modal').modal('hide');
             callNotify(data);
         }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...