HTTP POST请求中如何处理2D数组 [英] How 2D array is handled in HTTP POST request

查看:82
本文介绍了HTTP POST请求中如何处理2D数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆