HTTP POST请求中如何处理2D数组 [英] How 2D array is handled in HTTP POST request
问题描述
我有一个如下所示的HTML表单,它使用2D数组存储输入元素
I have a HTML Form like below which uses 2D array to store input elements
<form action="/myAction" method="post">
<input type="text" name="myList[1][NAME]" value="John" />
<input type="text" name="myList[1][AGE]" value="20" />
<input type="text" name="myList[2][NAME]" value="Mike" />
<input type="text" name="myList[2][AGE]" value="30" />
<input type="text" name="myList[3][NAME]" value="Sam" />
<input type="text" name="myList[3][AGE]" value="40" />
<input type="submit" value="submit" />
</form>
我想知道在HTTP请求中将传递多少个参数,只有一个或六个.如何编写表单,以便将超过6个键值对作为一个参数传递.
I wish to know how many parameters will be passed in the HTTP request, will it be only one or six. How can I write my form so that above 6 key-value pairs are passed as one parameter.
谢谢您的输入.
看起来下面的请求正在请求中发送6个参数,下面的表格中我怎么只能发送参数
Looks like below request is sending 6 params in request, how can I have only param be sent for below form
<form action="/myAction" method="post">
<input type="text" name="myList[]" value="John" />
<input type="text" name="myList[]" value="Peter" />
<input type="text" name="myList[]" value="Mike" />
<input type="text" name="myList[]" value="Neo" />
<input type="text" name="myList[]" value="Stella" />
<input type="text" name="myList[]" value="Eve" />
<input type="submit" value="submit" />
</form>
推荐答案
默认情况下,表单将以application/x-www-form-urlencoded
内容类型提交,因此您的数据将由
By default, the form will be submitted with application/x-www-form-urlencoded
content type, so your data will be URI-encoded by these rules.
已编码:
myList%5B%5D = John& myList%5B%5D = Peter& myList%5B%5D = Mike& myList%5B%5D = Neo& myList%5B%5D = Stella& myList%5B%5D = Eve
myList%5B%5D=John&myList%5B%5D=Peter&myList%5B%5D=Mike&myList%5B%5D=Neo&myList%5B%5D=Stella&myList%5B%5D=Eve
已解码:
myList [] = John& myList [] = Peter& myList [] = Mike& myList [] = Neo& myList [] = Stella& myList [] = Eve
myList[]=John&myList[]=Peter&myList[]=Mike&myList[]=Neo&myList[]=Stella&myList[]=Eve
如果您只想提交一个参数,则应在客户端对数据进行编码,例如您可以用逗号分隔所有值.
If you want to submit only one parameter, you should encode your data on client side, e.g. you can separate all values by comma.
这是一个可行的示例(使用 jQuery):
Here's a working example (using jQuery):
$('form').submit(function(e) {
processFormSubmission(this);
});
function processFormSubmission(formElem) {
var arr = [];
$(formElem).find(':input').each(function(i) {
$(this).attr('disabled', 'disabled'); // prevent from submitting
if( $(this).is(':submit') ) return true; // skip submit input field
arr.push(this.value);
});
$('<input>').attr({type: 'hidden', name: '_data', value: arr.join(',')}).appendTo(formElem);
}
上面的代码将创建隐藏的_data
输入,并将disabled
属性添加到其他输入字段,因此它们不会提交给服务器.
The above code will create hidden _data
input and will add disabled
attribute to other input fields, so they will be not submitted to server.
_data =约翰,彼得,迈克,尼奥·斯特拉,夏娃
_data=John,Peter,Mike,NeoStella,Eve
在服务器端,您应该解码该数据,例如像这样的东西:
On server side you should decode that data, e.g. something like this:
// var_dump( $_POST );
if( ! empty( $_POST['_data'] ) {
$myList = explode(',', $_POST['_data']);
// var_dump( $myList );
}
这篇关于HTTP POST请求中如何处理2D数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!