一般的 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 就直接对应着数组了,而不是字符串了。
求解答
1
jarlyyn 2017-02-13 17:52:46 +08:00
chrome->f12->network 选项卡
提交请求,看 xhr 下的条目的 request header |
2
edison111cry OP @jarlyyn
请求里是这个: https://www.baidu.com/?jsoncallback=jQuery111104055279161566616_1486979882385&uid=1&info[0][key]=value&_=1486979882386 |
3
jarlyyn 2017-02-13 18:05:10 +08:00
url 里很明显了吧?
你的问题是? |
4
edison111cry OP @jarlyyn
哦,好像明白了,如果拼接参数时 http://www.baidu.com?info[0]=value&info[1]=value2 这样我在 php 文件里用$_GET['info'] 获取到的就直接是一个数组了吧 但是为什么网上说 get/post 方式不可以传递数组,只可以传基本类型呢 |
5
jarlyyn 2017-02-13 18:19:19 +08:00
@edison111cry
你要了解 post 和 get 到底传递了什么。 首先, post 传递的内容是有很多种格式。如果是 json 格式的话什么都可以传。 get 和 post 本质上都是传递一个字符串,比如你的 "info[0]=value&info[1]=value2" 怎么解析就看具体实现了。 |
6
virusdefender 2017-02-13 18:19:47 +08:00
get 也是可以传递数组的,这取决于后端怎么去解析。比如 /?a=1&a=2&a=3 ,有的后端就会认为 a 是数组,有的就会取其中一个,而只识别 a[]的形式。
post 的话, body 里面 url encoded 的类似, json 的话,就自由一些了。 |
7
edison111cry OP @jarlyyn
多谢,明白了, URL 传递过来的 info[0]=value&info[1]=value2 ,是 PHP 识别出来自动帮忙转成的数组,而不是 ajax 请求直接通过 url 传的数组。 这样理解对吧 |
8
edison111cry OP @virusdefender
/?a=1&a=2&a=3 对于这种的 PHP 可能只识别 a 为 3 (前面的覆盖了),但是其他的 java 可能就识别成数组了 而 /?a[0]=1&a[1]=2&a[2]=3 这种就识别为数组了。 所以传递的都是基本类型字符串,只不过是 PHP 语言来解析出来成数组了,是这种理解吧 |
9
tumbzzc 2017-02-13 19:05:03 +08:00
ajax 本质上还是通过 post/get 提交数据, ajax 可以提交数组, post 也可以。
不知理解的有没有错 |
11
virusdefender 2017-02-13 19:38:17 +08:00
@edison111cry 嗯,如果你自己写代码去解析的话,你可以任意规定数组的格式
|