为什么我无法从 jQuery (PHP) 接收数据?
Why I can not receive data from jQuery (PHP)?
我有一个 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;
});
});
如果我提醒 selected 它会给我值列表。所以脚本已经初始化并获取数据。
在脚本结束时它接收反馈数据 html(data) 并将其发送回初始 php 文件。
PHP 从 js 文件(POST REQUEST)获取请求的文件 有这样的代码:
foreach($_POST['check_list'] as $selected){
echo $selected."</br>";
}
并且它发回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>";
}
您的 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
。
我有一个 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;
});
});
如果我提醒 selected 它会给我值列表。所以脚本已经初始化并获取数据。
在脚本结束时它接收反馈数据 html(data) 并将其发送回初始 php 文件。
PHP 从 js 文件(POST REQUEST)获取请求的文件 有这样的代码:
foreach($_POST['check_list'] as $selected){
echo $selected."</br>";
}
并且它发回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>";
}
您的 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
。