ajax get 请求时可以传递数组,为什么普通的 get/post 不可以

2017-02-13 17:48:06 +08:00
 edison111cry

一般的 get/post 好像只能传递基本的数据结构.

但为什么我用 ajax get 请求时就可以传递数组呢?

比如这样 ajax 请求: var global_array = new Array(); global_array.push({"key":"value"}); var sendData = { uid: uid,info:global_array};

$.ajax({ url : url, data: sendData, type : 'GET', dataType:"jsonp", jsonp:"jsoncallback" });

然后我在 php 页面: $info = I("param.info"); foreach ($info as $key => $value) { var_dump($value); }

直接就可以把 info 当成数组来循环了,这说明 ajax 请求过来的 info 就直接对应着数组了,而不是字符串了。

求解答

10702 次点击
所在节点    问与答
11 条回复
jarlyyn
2017-02-13 17:52:46 +08:00
chrome->f12->network 选项卡

提交请求,看 xhr 下的条目的 request header
edison111cry
2017-02-13 18:01:47 +08:00
jarlyyn
2017-02-13 18:05:10 +08:00
url 里很明显了吧?

你的问题是?
edison111cry
2017-02-13 18:06:02 +08:00
@jarlyyn
哦,好像明白了,如果拼接参数时 http://www.baidu.com?info[0]=value&info[1]=value2

这样我在 php 文件里用$_GET['info'] 获取到的就直接是一个数组了吧

但是为什么网上说 get/post 方式不可以传递数组,只可以传基本类型呢
jarlyyn
2017-02-13 18:19:19 +08:00
@edison111cry

你要了解 post 和 get 到底传递了什么。

首先, post 传递的内容是有很多种格式。如果是 json 格式的话什么都可以传。

get 和 post 本质上都是传递一个字符串,比如你的 "info[0]=value&info[1]=value2"

怎么解析就看具体实现了。
virusdefender
2017-02-13 18:19:47 +08:00
get 也是可以传递数组的,这取决于后端怎么去解析。比如 /?a=1&a=2&a=3 ,有的后端就会认为 a 是数组,有的就会取其中一个,而只识别 a[]的形式。

post 的话, body 里面 url encoded 的类似, json 的话,就自由一些了。
edison111cry
2017-02-13 18:21:39 +08:00
@jarlyyn
多谢,明白了, URL 传递过来的 info[0]=value&info[1]=value2 ,是 PHP 识别出来自动帮忙转成的数组,而不是 ajax 请求直接通过 url 传的数组。
这样理解对吧
edison111cry
2017-02-13 18:24:20 +08:00
@virusdefender

/?a=1&a=2&a=3 对于这种的 PHP 可能只识别 a 为 3 (前面的覆盖了),但是其他的 java 可能就识别成数组了
而 /?a[0]=1&a[1]=2&a[2]=3 这种就识别为数组了。

所以传递的都是基本类型字符串,只不过是 PHP 语言来解析出来成数组了,是这种理解吧
tumbzzc
2017-02-13 19:05:03 +08:00
ajax 本质上还是通过 post/get 提交数据, ajax 可以提交数组, post 也可以。
不知理解的有没有错
loading
2017-02-13 19:14:54 +08:00
@tumbzzc 你理解基本没错。
virusdefender
2017-02-13 19:38:17 +08:00
@edison111cry 嗯,如果你自己写代码去解析的话,你可以任意规定数组的格式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/340190

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX