Массив сообщений с плагином ajaxForm

Я использую этот плагин --> http://jquery.malsup.com/form/

Но я не могу отправить массив в PHP-скрипт.

Я пробовал это в функции beforeSubmit:

var concepts = new Array();
$('#myTable tbody tr td span.file').each(function(){
  concepts.push($(this).text());
});
arr.push({name: 'concepts',value:concepts});

И это в параметре данных:

data: {
  concepts: function(){
    var concepts = new Array();
    $('#myTable tbody tr td span.file').each(function(){
      concepts.push($(this).text());
    });
    return concepts;
  }
}

Но я всегда получаю строку, разделенную запятыми, в PHP-скрипте, а не массив, как при любом вызове ajax.

[concepts] => 20 Bafles J8 DB Line Array, 4 Bafles J12 DB Line Array, 10 Bafles J SUB, 12 Bafles B2 DB, 2 Bummpers J, 4 Bafles Q7 DB Front Fill, 12 Monitores M4 DB, 38 Amplificadores, Sub Snake, 6 Bafles Q1 DB Side Fill, 6 Bafles Q SUB DB, Centro de Carga,Andamio de 4 mts. de altura brandeados por los 4 lados con lona mesh a 1,200 dpis

Вышеупомянутое является результатом:

print_r($_POST)

В этом примере массив имеет 2 элемента.

Но в моих опубликованных данных есть запятые. Я знаю, что могу кодировать в JSON, а затем декодировать внутри PHP-скрипта, но я предпочитаю отправлять и получать массив. Есть ли способ добиться этого?

Я пытался использовать processData как false и ничего :(

Заранее спасибо!


person Marco Muciño    schedule 16.04.2019    source источник


Ответы (1)


В вашем примере для функции beforeSubmit вы, кажется, нажимаете несколько значений под одним и тем же входным именем, не объявляя его как массив (если это имеет смысл). См. обновленный пример:

var concepts = new Array();
$('#myTable tbody tr td span.file').each(function(){
  concepts.push($(this).text());
});

// Added square brackets to the `name` attribute
arr.push({name: 'concepts[]',value:concepts});

Если это не сработает, я бы попробовал отправить данные на сервер без плагина ajaxForm(). Например:

$('form').on('submit', function() {
    var data = $(this).serializeArray();

  $('#myTable tbody tr td span.file').each(function(){
    data.push({name: 'concepts[]', value: $(this).text()});
  });

  $.ajax({
    url: '/post/endpoint/example', // Change me!
    method: 'post',
    data: data
  });

  return false;

});

Если публикация без плагина работает, я бы предположил, что плагин пытается быть слишком умным и делает какую-то странную сериализацию данных формы.

person Levi Cole    schedule 16.04.2019
comment
Я попробовал ваше первое предложение, но затем он печатает его как массив, но с одним единственным элементом: [concepts] => Array ([0] => 2 SALONES PARA 30 PERSONAS, Copia de CD de 1-100 (Impresión con inyección de tinta, stuche slim) ). Пробую второе предложение.... - person Marco Muciño; 16.04.2019
comment
Второе предложение не сработало, снова массив с одним единственным элементом. Но я сделал это в других проектах, возможно, версия JQuery изменила это поведение? Я использую V.3.2.1 - person Marco Muciño; 16.04.2019
comment
Моя ошибка, второе предложение сработало, большое спасибо! - person Marco Muciño; 16.04.2019