首页 > 解决方案 > AJAX POST 不发送所有数据

问题描述

我在一个表单中有以下 HTML 代码,第一个(策略)在 post 中发送,但第二个没有(mfa)。我不知道为什么会这样,有什么想法吗?

                                    <label class="switch switch-flat">
                                        <input class="switch-input" type="checkbox" id="policy" method="post" name="policy" <?php if($row['policy'] === '1') echo 'checked="checked"';?> />
                                        <span class="switch-label" data-on="Yes" data-off="No"></span>                                      
                                        <span class="switch-handle"></span> 


                                    </label>
                                    <label for="policy">Does the vendor organization have a written Information Security policy?</label>
                                    </td>

                                </tr>
                                <tr>
                                    <td>
                                    <div class="col-md-12">

                                    <label class="switch switch-flat">
                                        <input class="switch-input" type="checkbox" name="mfa" id="mfa" method="post" <?php if($row['mfa'] === '1') echo 'checked="checked"';?> />
                                        <span class="switch-label" data-on="Yes" data-off="No"></span>                                      
                                        <span class="switch-handle"></span> 


                                    </label>
                                    <label for="mfa">Do they support and utilize multi-factor authentication?</label>
                                    </td>

这是我发送帖子数据的ajax。当我在开发工具中浏览要发送的标头时,我看到许多其他 HTML 名称都在发送,但大多数列为切换复选框的名称都没有发送,除了最上面的一个“策略”。

<script type='text/javascript'>
    /* attach a submit handler to the form */
$('#update').submit(function(e){
    e.preventDefault();
    $.ajax({
        url:'updateVendor.php',
        type:'post',
        data:$('#update').serialize(),
        success:function(){
            //whatever you wanna do after the form is successfully submitted
        }
    });
});
</script>

标签: javascripthtmlajax

解决方案


复选框仅在选中时才被认为具有值。否则,它不会包含在提交的表单数据中。

来自MDN 网站

注意:如果一个checkbox在提交表单的时候是unchecked,那么就没有提交给服务器的值来表示它的unchecked状态(例如value=unchecked);该值根本不提交给服务器。如果您想在未选中时为复选框提交默认值,您可以<input type="hidden">在表单中包含一个相同的namevalue,可能由 JavaScript 生成。

规避此限制的一个技巧是包含具有默认值的隐藏输入。例如

<input name="mfa" type="hidden" value="0">
<input name="mfa" type="checkbox" value="1">

使用这种方法,值 formfa将始终与表单数据一起提交。


推荐阅读