2017-10-19 272 views
0

我有以下问题:如何将一个空数组添加到FormData对象?

一个html表单,它有一个在FormData上用于通过ajax发送请求的N复选框及其信息。在PHP中,$ _ POST [“泰斯特”]变量不存在...

<form id="teste_form"> 
    <input type="checkbox" name="teste[]"> 
    <input type="checkbox" name="teste[]"> 
    <input type="checkbox" name="teste[]"> 
    <input type="checkbox" name="teste[]">... 
</form> 

<script> 
    var form_data_obj = new FormData(document.getElementById('teste_form')); 
    $.ajax({ 
     ... 
     data: form_data_obj 
     ... 
    }); 
</script> 

我知道,我可以用一个“如果(isset(...))”在PHP,但我真的不要不喜欢那个解决方案。对我而言,最好的解决方案是从FormData对象向PHP发送一个空数组。

观测值:我试图像出头,例如:

  • form_data_obj.append( '泰斯特[]',未定义)。
  • form_data_obj.append('teste []',0)。

但没有成功.... PHP的结果分别是: “未定义”] [ “0”]

我想获得$ _ POST [ '测试'] = []中PHP

这是可能的吗?

+0

我宁愿指定的表单字段名称索引...那么你将正好与检查值知道属于哪个“位置”。如果你在PHP中对数组进行foreach,那么“missing”索引不是真正的问题。 – CBroe

回答

1

闻起来像这样:How to Submit empty array from HTML Form Post to PHP

解决方法:你可以使用一个隐藏的输入元素与客户端的一个空值,并在服务器端的空值检查。像这样的东西:

var appended = null; 
 
$('.confirm_appointment').submit(function(e) { 
 

 
    if (appended !== null) appended.remove(); 
 
    /************************************/ 
 
    if ($("input[name='teste[]']:checked").length == 0) { 
 
    appended = $("<input type='hidden' name='teste[]' value=''>").appendTo($(this)); 
 
    } 
 
    /************************************/ 
 

 
    e.preventDefault(); 
 
    $(this).append(decodeURIComponent($(this).serialize()) + '<br />'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form name='confirm_appointment' method='post' class='confirm_appointment'> 
 
    <input type='checkbox' name="teste[]" value='hello1' /> 
 
    <input type='checkbox' name="teste[]" value='hello2' /> 
 
    <input type='checkbox' name="teste[]" value='hello3' /> 
 
    <input type='checkbox' name="teste[]" value='hello4' /> 
 
    <input type='submit' class='update_appointment_button' value='submit' /><br /> 
 
</form>

而在PHP端:

$teste = array_filter($_POST["teste"]); 
+0

具有空值的隐藏输入帮助我得到很多,它应得到upvote,但我正在寻找的解决方案是与JS,如form_data.append('测试',[])和接收,与治疗,PHP ,$ _POST ['test'] = []。 – Doglas

+0

更新了我的答案。 –

0

这是绝对有可能的,即使没有jQuery的。

yourFormData.append('key', []);

+0

不幸的是,代码集,在PHP,$ _POST [“teste”] =“”,不= = [] ... – Doglas

+0

但您可以使用我上面手动显示的代码添加它... – Niels

+0

PHP错误:array_filter()期望参数1是数组,字符串给定... 但即使如此,我的PHP代码是通用的。我不想改变它,直到我确定无法通过FormData发送一个空数组。 – Doglas