我有一个PHP表单:
<form action="" method="post" id="CheckBoxForm">
foreach ( $results as $result ) :
<input type="checkbox" class="chk" id="check_list[]" value="'.($result->meta_value).'"/>
<input type="submit" name="submit" value="Submit"/>
</form>
我从js文件中获取值:
jQuery('#CheckBoxForm').on('submit', function(e) {
var chkArray = [];
var CheckBoxForm=jQuery(this).serialize();
alert(CheckBoxForm);
jQuery(".chk:checked").each(function() {
chkArray.push($(this).val());
});
var selected;
selected = chkArray.join(',') + ",";
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: selected,
success:function(data){
jQuery("#feedback_country").html(data);
}
});
return false;
});
});
如果我提醒选择,它会为我提供值列表。所以脚本已初始化并获取数据。
在脚本结束时,它会收到反馈数据 html(data)并将其发送回初始的php文件。
从js文件接收请求的PHP文件(POST REQUEST)有这样的代码:
foreach($_POST['check_list'] as $selected){
echo $selected."</br>";
}
然后发回0。我无法理解错误。
答案 0 :(得分:1)
您的JavaScript中有太多额外的代码是不需要的。您不需要chkArray
或selected
个变量。
jQuery('#CheckBoxForm').on('submit', function(e) {
var CheckBoxForm = jQuery(this).serialize();
jQuery.ajax({
type:"POST",
url: "/wp-admin/admin-ajax.php",
data: CheckBoxForm,
success:function(data){
jQuery("#feedback_country").html(data);
}
});
return false;
});
这应该就是你所需要的。 serialize()
将获取表单中的所有值,并以正确的格式创建一个字符串,以便发送到您的PHP脚本。
注意:您的HTML不正确,您的表单应如下所示:
<form action="" method="post" id="CheckBoxForm">
<?php foreach($results as $result): ?>
<input type="checkbox" class="chk" name="check_list[]" value="<?=$result->meta_value?>"/>
<?php endforeach; ?>
<input type="submit" name="submit" value="Submit"/>
</form>
您希望在复选框中使用name
属性,而不是id
。
答案 1 :(得分:0)
您的问题是您要发送一个字符串而不是键值对:
selected = chkArray.join(',') + ",";
...
data: selected,
虽然我不建议手动构建查询字符串 - serialize()
将负责正确的转义 - 您可以发送您的检查列表字符串,如:
data: {check_list: selected},
编辑:现在在php中,您将拥有一个$_POST['check_list']
变量,但这是一个以逗号分隔的字符串中的列表。因此,要将其转换为数组并在其上循环,您需要以下内容:
$arr = explode(',', $_POST['check_list']);
foreach ($arr as $selected) {
echo $selected."</br>";
}