我有一个具有深度多维输入的表单,如下所示:
<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()
my $ _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如何发送多维数组的其他帖子,所以也许我需要问的问题是,如何提取表单数据,将其保存在多维数组中?
答案 0 :(得分:4)
我的猜测是,当你正在进行AJAX通话时:
data: {data: $("#theForm").serializeArray()}
不要这样做,只需将data
设置为serializeArray
的值。
data: $("#theForm").serializeArray()
编辑:您说您使用的是$.post
,我认为您这样做了:
$.post('/your/url', {data: $("#theForm").serializeArray()}, function(){});
为了使它起作用,你需要这样做:
$.post('/your/url', $("#theForm").serializeArray(), function(){});
答案 1 :(得分:2)
接受的答案完全正确。作为旁注,如果您需要将其他数据添加到发布数据数组中,您只需要以{name: "", value: ""}
就我而言,除了表单中所有输入的值之外,我还希望根据用户点击的按钮添加值。所以你要做的就是:
var data = $("#myForm").serializeArray();
data.push({name: "btnVal", value="button_a"});
并确保发布如下:
$.post("/some/url", data, function(){});