我正在尝试将数组从jQuery传递给PHP。
<input type="checkbox" id="name1" name="name[]" value="name1"> Name1
<input type="checkbox" id="name2" name="name[]" value="name2"> Name2
<input type="checkbox" id="name3" name="name[]" value="name3"> Name3<br />
<input type="checkbox" id="phone1" name="phone[]" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone[]" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone[]" value="motorola"> Motorola<br />
$(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个元素。即使我选择了多个元素。我做错了什么?
答案 0 :(得分:1)
你在每个循环中调用ajax帖子,这意味着如果你检查五个方框,你将为每次调用的每次迭代发送一个单独的帖子。
这意味着第一个帖子只有一个复选框,第二个帖子将有两个,等等。
除非你真的想这样做,否则你需要在你的ajax调用之前关闭你的每个循环。
这并不能解决名称问题,但它会解决您只能将一个复选框发送到php的原因。
答案 1 :(得分:1)
这比使用FormData
更简单。 (请注意,我已将name[]
更改为name
,将phone[]
更改为phone
。)我还将AJAX调用移到了each
循环之外。
HTML:
<input type="checkbox" id="name1" name="name" value="name1"> Name1
<input type="checkbox" id="name2" name="name" value="name2"> Name2
<input type="checkbox" id="name3" name="name" value="name3"> Name3<br />
<input type="checkbox" id="phone1" name="phone" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone" value="motorola"> Motorola<br />
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);
答案 2 :(得分:0)
您的代码存在多个问题,
.each
函数之外。change
事件之外定义数组。所以改变你的代码,
$(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);
}
});
});
});
答案 3 :(得分:-1)
<input type="checkbox" id="name1" name="name[]" value="name1"> Name1
<input type="checkbox" id="name2" name="name[]" value="name2"> Name2
<input type="checkbox" id="name3" name="name[]" value="name3"> Name3
<br />
<input type="checkbox" id="phone1" name="phone[]" value="samsung"> Samsung
<input type="checkbox" id="phone2" name="phone[]" value="nokia"> Nokia
<input type="checkbox" id="phone3" name="phone[]" value="motorola"> Motorola
<br />
$(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名称