乐天愁
乐天愁
  • 发布:2019-08-17 16:24
  • 更新:2023-01-18 07:48
  • 阅读:7877

【报Bug】uniapp request中data传递数组值的时候,数组没有正确的被传递

分类:uni-app

详细问题描述

uniapp request中data传递数组值的时候,数组没有正确的被传递

[内容]

使用uni.request传递数组,比如

uni.request({  
  method: 'GET',  
  dataType: 'json',  
  url: 'http://api.cn',  
  data: {  
    a: [1,2]  
  }  
})

[结果]
得到的请求地址是: http://api.cn?a=%5B1%2C2%5D

[期望]
期望得到的请求地址:http://api.cn?a[]=1&a[]=2

尝试不使用data传递数据,改为:

uni.request({  
  method: 'GET',  
  dataType: 'json',  
  url: 'http://api.cn?a[]=1&a[]=2',  
  data: {}  
})

得到的请求地址是 http://api.cn?a[]=2,第一个值被抛弃了。这种该怎么处理

2019-08-17 16:24 负责人:无 分享
已邀请:
乐天愁

乐天愁 (作者)

还有一个问题,如果data传递的是query string,会被分割。比如:a=1&b=2 会被处理成 0=a&1==&2=&&3=b&4=c&5=2

DCloud_UNI_FXY

DCloud_UNI_FXY

预计下个版本修复http://api.cn?a[]=1&a[]=2丢失数据的问题

data 为 query string 的问题也会同步修复,与小程序保持一致(应该是被直接丢弃了)
根据规范,以下请求是会把[1,2]转换成 json 字符串的。所以如果要传递数组参数,那还是自己在 url 后边直接拼接数组参数。

uni.request({    
  method: 'GET',    
  dataType: 'json',    
  url: 'http://api.cn',    
  data: {    
    a: [1,2]    
  }    
})  
  • 乐天愁 (作者)

    了解,辛苦了【比心】

    2019-08-17 17:44

  • 7***@qq.com

    FYI,下一条评论

    2019-10-24 17:05

7***@qq.com

7***@qq.com

建议借鉴axios等的做法,把数组转一下再放到参数里,开发者已经习惯这种调用
axios源码部分供参考

var parts = [];  

        utils.forEach(params, function serialize(val, key) {  
          if (val === null || typeof val === 'undefined') {  
            return;  
          }  

          if (utils.isArray(val)) {  
            key = key + '[]';  
          } else {  
            val = [val];  
          }  

          utils.forEach(val, function parseValue(v) {  
            if (utils.isDate(v)) {  
              v = v.toISOString();  
            } else if (utils.isObject(v)) {  
              v = JSON.stringify(v);  
            }  
            parts.push(encode(key) + '=' + encode(v));  
          });  
        });  

        serializedParams = parts.join('&');
zhiye

zhiye

同问这个问题???

z***@163.com

z***@163.com

同问,头大了

  • DCloud_uniCloud_WYQ

    这个问题已经修复了,你那里还能复现吗?

    2020-03-11 12:26

  • DCloud_uniCloud_WYQ

    如果有问题,可以上传一份demo我们验证一下

    2020-03-13 14:12

  • w***@163.com

    你可以试试把data的数组那一项赋值为JSON.stringify(数组)。我是这么解决的。

    2020-04-17 18:01

蜗牛小弟

蜗牛小弟

目前3.6.18模式下还是存在这个问题。
相关链接https://ask.dcloud.net.cn/question/161703

要回复问题请先登录注册