如何将带有jquery的所有元素的数组传递给php

我试图将数组从jQuery传递给PHP。

 Name1  Name2  Name3
Samsung Nokia Motorola
 $(document).ready(function() { $(":checkbox").on('change', function() { var group = []; var mygroup = {}; $(':checkbox:checked').each(function(i){ var val = this.value; var name = this.name; mygroup[name] = val; var all = name + "=" + val; group.push(all); $.ajax({ type: "POST", url: 'testdraft1.php', data: mygroup, // TRIED WITH group and all also. Doesn't work. success: function(data) { $("#result").html(data); } }); }); }); }); 

使用此代码,数组将传递给PHP,但只有1个元素。 即使我选择了多个元素。 我究竟做错了什么?

这可行,并且可能比使用FormData更简单。 (请注意,我已将name[]更改为name并将phone[]更改为phone 。)我还将AJAX调用移到了each循环之外。

HTML:

  Name1  Name2  Name3
Samsung Nokia Motorola

JavaScript的:

 $(document).ready(function() { $(":checkbox").on('change', function() { var mygroup = {}; $(':checkbox:checked').each(function(i) { var val = this.value; var name = this.name; mygroup[name] = (mygroup[name] || []).concat([val]); }); $.ajax({ type: "POST", url: 'testdraft1.php', data: mygroup, success: function(data) { $("#result").html(data); } }); }); }); 

编辑

这条线有点令人困惑:

 mygroup[name] = (mygroup[name] || []).concat([val]); 

这是一个更简单的版本:

 // initialize with an empty array if needed if (mygroup[name] === undefined) { mygroup[name] = []; } // append the most recent value to the array mygroup[name].push(val); 

你在每个循环中调用ajaxpost,这意味着如果你检查五个盒子,你将为每次调用的每次迭代发送一个单独的post。

这意味着第一个post只有一个复选框,第二个post将有两个,等等。

除非你真的想这样做,否则你需要在你的ajax调用之前关闭你的每个循环。

这并没有解决名称问题,但它将解决您只有一个复选框发送到PHP的原因。

您的代码存在多个问题,

  1. AJAX代码应该在.each函数之外。
  2. 定义数组外部change事件。
  3. 你不能在AJAX请求中直接发送这样的数组。 使用FormData 。

所以改变你的代码,

 $(document).ready(function() { var group = []; //DEFINED THE ARRAY $(":checkbox").on('change', function() { $(':checkbox:checked').each(function(i) { var val = this.value; var name = this.name; var dataObject = {}; dataObject.name = name; dataObject.val = val; group.push(dataObject); }); var fd = new FormData(); for (var i = 0; i < group.length; i++) { fd.append(group[i].name, group[i].val); } $.ajax({ type: "POST", url: 'testdraft1.php', data: fd, success: function(data) { $("#result").html(data); } }); }); }); 
  Name1  Name2  Name3 
Samsung Nokia Motorola
$(document).ready(function() { $(":checkbox").on('change', function() { var group=[]; //DEFINED THE ARRAY var mygroup = {}; // DEFINED THE OBJECT $(':checkbox:checked').each(function(i){ var val= this.value; var id = this.id; mygroup[id]=val; //PUSH VALUES TO THE OBJECT mygroup var all = id+"="+val; group.push(all); // PUSH ALL CHECKBOX VALUES TO ARRAY $.ajax({ type: "POST", url: 'testdraft1.php', data : mygroup, //TRIED WITH group and all also. Doesn't work. success: function(data){ $("#result").html(data); } }); }); }); });

使用相同的名称,而是更改名称,您更改它将适用于您的ID名称