2017-10-19 71 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