【问题标题】:Why I can not receive data from jQuery (PHP)?为什么我不能从 jQuery (PHP) 接收数据?
【发布时间】:2015-01-08 19:59:27
【问题描述】:

我有一个 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文件。

接受js文件请求的PHP文件(POST REQUEST)有这样的代码:

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

而且它会返回 0。 我不明白出了什么问题。

【问题讨论】:

    标签: javascript php jquery forms get


    【解决方案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

    【讨论】:

    • 火箭,非常感谢。现在可以了。祝你好运,一切顺利!
    【解决方案2】:

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

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

    【讨论】:

    • 感谢 Jeroen 的回复。我已经对此进行了更改,但它仍然给我发回 0。 :(
    • @inno.vlad 检查我的更新,你也需要更改 php 端。
    • 嗯..奇怪。响应时仍为 0。我可以做些什么来调试问题所在?因为控制台中没有错误。
    • @inno.vlad 转储变量,console.log() 用于 javascript 变量,var_dump() 用于 php 变量。它们都应该直接在控制台中弹出,或者在 ajax 响应中弹出。
    • 杰罗恩,感谢您的支持。我已经尝试了 Rocket 的修改,它对我有用,所以我保留了它。祝你在所有项目中好运。
    猜你喜欢
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    相关资源
    最近更新 更多