为什么我不能从jQuery(PHP)接收数据

Why I can not receive data from jQuery (PHP)?

本文关键字:数据 PHP 不能 jQuery 为什么      更新时间:2023-09-26

我有一个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文件(POST REQUEST)获取请求的PHP文件具有这样的代码:

foreach($_POST['check_list'] as $selected){
echo $selected."</br>";
}

它发回 0。我不明白出了什么问题。

你的 JavaScript 中有太多不需要的额外代码。 您不需要这些chkArrayselected变量。

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属性。

您的问题是您要发送单个字符串而不是键值对:

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>";
}