2013-02-27 25 views
0

我有很深的多維輸入,像這樣一種形式:

<form id="theForm"> 
<input type='text' name='one[two][three][]' /> 
<input type='text' name='one[two][three][]' /> 
<input type='text' name='four[five][six][seven]' /> 
<input type='text' name='eight[nine][ten]' /> 
</form> 

我試圖通過AJAX相同的格式發送的值,就好像提交表單一般。我的意思是,如果我點擊提交按鈕,在PHP中,$ _POST看起來像這樣。這是我想要的:

array('one' => array('two' => array('three'=>array([0] => "", [1] => ""))), 
     'four' => array('five' => array ('six' => array('seven' => ""))), 
     'eight' => array('nine' => array('ten' => ""))) 
    ) 

我基本上是想AJAX的表單提交。當我做

$("#theForm").serializeArray() 

而過分$.post()我的$ _ POST看起來像這樣發送:

array([0] => array("name" => string "one[two][three][]", value=>"") 
     [1] => array("name" => string "one[two][three][]", value=>"") 
     [2] => array("name" => string "four[five][six][seven]", value=>"") 
     [3] => array("name" => string "eight[nine][ten]", value=>"") 
    ) 

這是對我沒有用的。我需要保留我之前概述的多維結構。我想我可以穿過陣列並切斷字符串以重新創建我需要的東西,但這對我來說似乎是天作之作。 jQuery友好的方式來實現這一點?

我讀過關於jQuery如何發送多維數組的很好的其他文章,所以也許我需要問的問題是,如何提取我的表單數據,並將其保存在多維數組中?

+1

[看看這個答案】(http://stackoverflow.com/a/1186309/575527)。這將表單轉換爲JS對象,通過將元素正確地轉換爲對象和數組,可以保留表單數組的鍵值結構。 – Joseph 2013-02-27 19:05:11

+0

你可以通過AJAX顯示你通過AJAX發送數據的代碼嗎? – 2013-02-28 15:38:14

回答

4

我的猜測是,當你在做的AJAX調用你正在做的:

data: {data: $("#theForm").serializeArray()} 

不要那樣做,只是設置dataserializeArray值。

data: $("#theForm").serializeArray() 

編輯:你說你正在使用$.post,我認爲你這樣做是:

$.post('/your/url', {data: $("#theForm").serializeArray()}, function(){}); 

爲了它的工作,你需要做的是這樣:

$.post('/your/url', $("#theForm").serializeArray(), function(){}); 
+0

這不是我正在做的事,也不是那個問題。問題是serializeArray不根據各種數組級別來構造數據。它是「平坦的」,「name」屬性設置爲「任何[名字] [是]」。似乎做我想做的事情的唯一方法就是自己做。 – 2013-02-28 15:27:08

+2

@ parker.sikand:這完全是*你正在做什麼,儘管我懷疑你正在使用'$ .post'而不是'$ .ajax'。'serializeArray'返回一個包含'name'和'value'鍵的對象數組。當傳遞給'$。param'(由jQuery自動完成)時,它將轉換爲您期望格式的查詢字符串。如果你發送數據如'{data:$(「#theForm」)。serializeArray()}',那麼它將不會被正確發送。 – 2013-02-28 15:32:24

+0

你是完全正確的,我爲我的無知道歉。 – 2013-03-01 18:23:49

2

接受的答案是完全正確的。請注意,如果您需要將其他數據添加到發佈數據數組中,您只需將其推送到數組中,格式爲{name: "", value: ""}

就我而言,我希望基於按鈕添加一個值除了表單中所有輸入的值以外,用戶還可以單擊它們。因此,所有你需要做的就是:

var data = $("#myForm").serializeArray(); 
data.push({name: "btnVal", value="button_a"}); 

並確保您發佈,如:

$.post("/some/url", data, function(){});