使用ajaxForm插件发布数组

时间:2019-04-16 14:48:05

标签: php jquery 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参数中:

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,但什么也没有:(

谢谢!

1 个答案:

答案 0 :(得分:0)

在用于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;

});

如果发布时没有插件有效,那么我会认为插件试图过分聪明,并对表格数据进行了一些奇怪的序列化。