如何将一个空数组添加到FormData对象?
我有以下问题:如何将一个空数组添加到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
这是可能的吗?
闻起来像这样: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"]);
具有空值的隐藏输入帮助我得到很多,它应得到upvote,但我正在寻找的解决方案是与JS,如form_data.append('测试',[])和接收,与治疗,PHP ,$ _POST ['test'] = []。 – Doglas
更新了我的答案。 –
我宁愿指定的表单字段名称索引...那么你将正好与检查值知道属于哪个“位置”。如果你在PHP中对数组进行foreach,那么“missing”索引不是真正的问题。 – CBroe