通过jQuery post将复选框数据传递给db时的奇怪现象


Oddity when passing checkbox data to db via jQuery post

我遇到了一个奇怪的问题。我需要异步发布数据到第三方系统。一切工作正常,除了两个复选框在我的形式结束。不幸的是,我无法访问系统的数据库,因此成功/失败只是确定是否有任何结果显示在该系统的管理区域。

表单和jQuery都是用PHP构建的。以下相关字段:

Have a Representative Call Me: <input  id="00N60000002Rtib" name="00N60000002Rtib" type="checkbox" value="1" /><br>
Send Marketing Material and Updated News: <input  id="00N60000002Rtig" name="00N60000002Rtig" type="checkbox" value="1" /><br>

数据结构(PHP):

foreach ($values as $key => $val) {
    if ($key == '00N60000002Rtib' || $key == '00N60000002Rtig') {
        $data .= "$key : $val, ";
    } else {
        $data .= "$key : '"$val'", ";
    }
}
$data = substr($data, 0, -2); // remove trailing comma and space

和jQuery构造:

<script type="text/javascript">
    $(window).load(function() {
        $.post('http://somesite.com', { <?php echo $data; ?> });
    });
</script>

查看HTML源代码确认我的post $data是正确构造的。

真正的奇怪的是,具有相同字段的纯HTML表单可以正确发布。我难住了。什么好主意吗?

我遇到了同样的问题,并且发现即使复选框是空的,并且似乎没有包含在post请求中,它们仍然被我的服务器标记为"checked"(从而插入到数据库中)。请确保这些值不是空的,以避免ajax提交的复选框出现任何奇怪的情况。

这将取消空值的post键设置:

foreach($_POST as $k=>$v) { if(empty($v)) unset($_POST[$k]); }