Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在HTTP POST请求中处理2D数组_Javascript_Html_Arrays_Post_Multidimensional Array - Fatal编程技术网

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

Javascript 如何在HTTP POST请求中处理2D数组,javascript,html,arrays,post,multidimensional-array,Javascript,Html,Arrays,Post,Multidimensional Array,我有一个如下的HTML表单,它使用2D数组来存储输入元素 我想知道HTTP请求中会传递多少个参数,是一个还是六个。如何编写表单,以便将上述6个键值对作为一个参数传递 谢谢你的投入 编辑:看起来下面的请求在请求中发送了6个参数,我怎么能只为下面的表单发送参数 <form action="/myAction" method="post"> <input type="text" name="myList[]" value="John" /> <input ty

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


我想知道HTTP请求中会传递多少个参数,是一个还是六个。如何编写表单,以便将上述6个键值对作为一个参数传递

谢谢你的投入

编辑:看起来下面的请求在请求中发送了6个参数,我怎么能只为下面的表单发送参数

<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>

响应如下所示

Array
(
    [myList] => Array
        (
            [1] => Array
                (
                    [NAME] => John
                    [AGE] => 20
                )
            [2] => Array
                (
                    [NAME] => Mike
                    [AGE] => 30
                )
            [3] => Array
                (
                    [NAME] => Sam
                    [AGE] => 40
                )
        )
)
编辑:为了更具体地回答您的问题,响应中将只有一个参数,但该参数将是一个数组。数组的每个元素都是一个数组本身(请注意,这是一个数组数组,从技术上讲不是2D数组,这不完全是一回事)


一般来说,您的模型很好,这些数据在服务器端很容易处理。

默认情况下,表单将与
应用程序/x-www-form-urlencoded
内容类型一起提交,因此您的数据将按照规则进行URI编码

编码:

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[]=约翰和myList[]=彼得和myList[]=迈克和myList[]=尼奥和myList[]=斯特拉和myList[]=伊芙

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

下面是一个工作示例(使用jQuery):


这实际上是一个非常有用的特性。如果仔细观察,您会发现它实际上非常接近于PHP中数组的操作方式

<input type="text" name="myList[]" value="John" />
<input type="text" name="myList[]" value="Peter" />
<input type="text" name="myList[]" value="Mike" />
例如,它的设计使您可以轻松地使用输入的
name
属性创建PHP数组

<input type="text" name="myList[user][100505][name]" value="John" />
要让PHP模块填充
$\u POST
数组,您需要发送两个
内容类型
标题之一:
应用程序/x-www-form-urlencoded
多部分/表单数据;boundary-…
这是您的浏览器自动执行的操作。如果注意请求主体,您会注意到参数的定义与输入字段的命名完全相同,这意味着它们将以完全相同的顺序使用相同的值进行解析

考虑以下示例:

<input type="text" name="myList[]" value="John" />
<input type="text" name="myList[]" value="Peter" />
<input type="text" name="myList[]" value="Mike" />

但是,这将导致一个包含3个元素的数组

<input type="text" name="myList[1]" value="John" />
<input type="text" name="myList[1]" value="Peter" />
<input type="text" name="myList[1]" value="Mike" />

这将产生一个只有一个元素的数组,该元素将是
Mike
,因为参数是按照提供的顺序解析的,并且由于它们都具有相同的键,最后一个将是您得到的。另外,不要被愚弄,你只得到一个元素,所有元素都被请求携带并传递到服务器,即使你有1000个输入,你仍然会在你的
$\u POST['myList']
中得到一个元素,但所有1000个元素都会被解析


您可以继续使用任意多个级别,但请记住,这样做时,如果有大量此类输入和大量数组级别,则可能会显著增加请求大小。还请注意,从PHP 7.0(尚未发布)开始,出于安全目的,参数数量将限制在1000个,即DoS攻击,利用此弱点发送大量参数,服务器将尝试解析这些参数,消耗资源。

HTTP参数中数组的使用特定于客户端和/或服务器端实现。HTTP协议中没有数组(包括POST和GET),甚至没有键/值格式(请参阅)

键/值标准是通过使用
定义的。当方法为POST时,HTTP查询体包含类型为的“某些数据”

在第一个示例中,HTML将为每个
输入
字段设置一个键/值对

[
]
字符只是HTTP协议视图中的随机字节,只是HTML键/名称的一部分

HTTP查询如下所示:

[...]
Content-Type: application/x-www-form-urlencoded

myList%5B1%5D%5BNAME%5D=John&myList%5B1%5D%5BAGE%5D=20&myList%5B2%5D%5BNAME%5D=Mike&myList%5B2%5D%5BAGE%5D=30&myList%5B3%5D%5BNAME%5D=Sam&myList%5B3%5D%5BAGE%5D=40
现在的问题是:

我想知道HTTP请求将传递多少个参数

HTTP请求中始终有一个(或无)查询字符串和一个(或无)正文。所以,这个问题本身并没有真正意义。如果更多的是关于HTML,那么答案是6。 一个输入字段=一个键/值对=一个特定信息。要获得多个信息,需要多个输入字段

我假设您使用的是PHP,它解析
[
]
字符,因此从PHP的角度来看,您将得到以下结构:

Array
(
    [myList] => Array
        (
            [1] => Array
                (
                    [NAME] => John
                    [AGE] => 20
                )
            [2] => Array
                (
                    [NAME] => Mike
                    [AGE] => 30
                )
            [3] => Array
                (
                    [NAME] => Sam
                    [AGE] => 40
                )
        )
)
关于另一个问题:

我怎样才能只发送以下表格的参数

<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>

六个输入=六个信息=六个键/值。但是PHP将为您提供一个包含六个值的数组。 或者你只需要一个


如果您没有使用PHP,那么它是特定于您所使用的语言的,因此,请澄清这个问题。

更好的做法是将数组设置为JSON对象并传递它。

我想知道HTTP请求中将传递多少个参数:查看开发人员工具的“网络”选项卡或使用类似的代理,这都是关于接收语言如何解析post数据的。您使用的是哪种语言或http服务器库?谢谢您的回复,您能告诉我如何在客户端编码数据吗?当我尝试join()或toString()时,如何将myList转换为CSV?它将字符串化整个输入元素,而我只希望值在那里。谢谢,我也找到了解决方法。很高兴听到这个消息!顺便问一下,你的解决办法是什么?:)@unixarmy在
arr.slice(',')
上使用
.slice(',')的目的是什么?@guest271314,很好!我更新了代码,
arr.join(',')
是应该使用的正确方法
[...]
Content-Type: application/x-www-form-urlencoded

myList%5B1%5D%5BNAME%5D=John&myList%5B1%5D%5BAGE%5D=20&myList%5B2%5D%5BNAME%5D=Mike&myList%5B2%5D%5BAGE%5D=30&myList%5B3%5D%5BNAME%5D=Sam&myList%5B3%5D%5BAGE%5D=40
Array
(
    [myList] => Array
        (
            [1] => Array
                (
                    [NAME] => John
                    [AGE] => 20
                )
            [2] => Array
                (
                    [NAME] => Mike
                    [AGE] => 30
                )
            [3] => Array
                (
                    [NAME] => Sam
                    [AGE] => 40
                )
        )
)
<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>