如何在HTTP POST请求中处理2D数组

Rav*_*pta 10 html javascript arrays post multidimensional-array

我有一个像下面的HTML表单,它使用2D数组来存储输入元素

<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>
Run Code Online (Sandbox Code Playgroud)

我想知道在HTTP请求中将传递多少参数,它只有一个或六个.如何编写表单以便将6个以上的键值对作为一个参数传递.

谢谢你的投入.

编辑: 看起来下面的请求是在请求中发送6个参数,我怎样才能为下面的表单发送param

<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>
Run Code Online (Sandbox Code Playgroud)

kav*_*kav 10

默认情况下,表单将以application/x-www-form-urlencoded内容类型提交,因此您的数据将由这些规则进行URI编码.

编码:

myList中5B%5D%=约翰&myList中5B%5D%=彼得myList中5B%5D%=迈克&myList中5B%5D%=新&myList中5B%5D%=斯特拉&myList中5B%5D%=夏娃

解码:

myList中[] =约翰&myList中[] =彼得myList中[] =迈克&myList中[] =新&myList中[] =斯特拉&myList中[] =夏娃

如果您只想提交一个参数,则应在客户端对数据进行编码,例如,您可以用逗号分隔所有值.

这是一个工作示例(使用 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);
}
Run Code Online (Sandbox Code Playgroud)

上面的代码将创建隐藏的_data输入,并将disabled属性添加到其他输入字段,因此它们将不会提交给服务器.

_data =约翰,彼得,迈克,NeoStella,夏娃

在服务器端,您应该解码该数据,例如:

// var_dump( $_POST );

if( ! empty( $_POST['_data'] ) {
    $myList = explode(',', $_POST['_data']);
    // var_dump( $myList );
}
Run Code Online (Sandbox Code Playgroud)