为什么我无法从jQuery(PHP)接收数据?

时间:2015-01-08 19:59:28

标签: javascript php jquery forms get

我有一个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。我无法理解错误。

2 个答案:

答案 0 :(得分:1)

您的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

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