如何将带有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的原因。
您的代码存在多个问题,
- AJAX代码应该在
.each
函数之外。 - 定义数组外部
change
事件。 - 你不能在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名称