V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
edison111cry
V2EX  ›  问与答

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

  •  
  •   edison111cry · 2017-02-13 17:48:06 +08:00 · 10702 次点击
    这是一个创建于 2871 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一般的 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 就直接对应着数组了,而不是字符串了。

    求解答

    11 条回复    2017-02-13 19:38:17 +08:00
    jarlyyn
        1
    jarlyyn  
       2017-02-13 17:52:46 +08:00
    chrome->f12->network 选项卡

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

    你的问题是?
    edison111cry
        4
    edison111cry  
    OP
       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
        5
    jarlyyn  
       2017-02-13 18:19:19 +08:00
    @edison111cry

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

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

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

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

    post 的话, body 里面 url encoded 的类似, json 的话,就自由一些了。
    edison111cry
        7
    edison111cry  
    OP
       2017-02-13 18:21:39 +08:00
    @jarlyyn
    多谢,明白了, URL 传递过来的 info[0]=value&info[1]=value2 ,是 PHP 识别出来自动帮忙转成的数组,而不是 ajax 请求直接通过 url 传的数组。
    这样理解对吧
    edison111cry
        8
    edison111cry  
    OP
       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
        9
    tumbzzc  
       2017-02-13 19:05:03 +08:00
    ajax 本质上还是通过 post/get 提交数据, ajax 可以提交数组, post 也可以。
    不知理解的有没有错
    loading
        10
    loading  
       2017-02-13 19:14:54 +08:00 via Android
    @tumbzzc 你理解基本没错。
    virusdefender
        11
    virusdefender  
       2017-02-13 19:38:17 +08:00
    @edison111cry 嗯,如果你自己写代码去解析的话,你可以任意规定数组的格式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1777 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:25 · PVG 00:25 · LAX 08:25 · JFK 11:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.