乐天愁
乐天愁
  • 发布:2019-09-17 14:19
  • 更新:2021-11-25 17:58
  • 阅读:11010

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

分类:uni-app

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

[内容]

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

uni.request({    
  method: 'POST',  
  header: {  
    'content-type': 'application/x-www-form-urlencoded',  
  },   
  dataType: 'json',    
  url: 'http://api.cn',    
  data: {    
    a: [1,2]    
  }  
})

[结果]
得到的请求数据

a: 1,2

[期望]
期望得到的请求数据

a: 1  
a: 2
2019-09-17 14:19 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com - 刚接触uniapp的一只小白

我是json了下就能传递数组了

dyjx2004

dyjx2004

已经解决了 前端用JSON.stringify传递后

后端php再用 json_decode(stripcslashes(html_entity_decode(***)),true);

最后就成数组了 如果不加最后的true 会变成object

sharno

sharno - 接活,付费咨询q153238536

  header: {    
    'content-type': 'application/x-www-form-urlencoded',    
  },      

这个头不要加试试

  • 乐天愁 (作者)

    换成 application/json 是可以的。但是application/x-www-form-urlencoded的行为是错误的

    2019-09-18 15:47

1***@163.com

1***@163.com

解决了吗

  • 乐天愁 (作者)

    还没有,官方也没有回复

    2019-10-06 17:35

QQ375776626

QQ375776626 - 80后

同样的疑惑

千尺梦

千尺梦

直接将数组用qs转换成a=2&a=3&a=5这种格式拼在url后面算了

  • 乐天愁 (作者)

    post提交,放url不合适

    2019-12-11 13:35

z***@163.com

z***@163.com

请问一下这个问题有什么解决方案吗?我现在也是post请求传递不了数组

Absorbed66c

Absorbed66c - 码农一枚

这个问题什么时候能修复呢??

2***@qq.com

2***@qq.com - hjw1203

同问题呀,有没有什么办法

小书1998

小书1998

请问解决没有啊 post请求时数组会变成对象报400

jasonw

jasonw

也遇到此问题,两种方式,
方案一、前后端都调整,都采用application/json的方式提交和接收。
方案二、将提交的参数转为字符串即可。
方案二的转换代码如下,供参考:

if (JSON.stringify(options.data) !== '{}') { //将post请求参数变为字符串,json数组只处理一层  
                let res = []  
                for (let key in options.data) {  
                    if ('object' == typeof(options.data[key])) {  
                        if (!(options.data[key] instanceof Array)) {//对象就直接转为字符串  
                            res.push(encodeURIComponent(key) + '=' + encodeURIComponent(JSON.stringify(options.data[key])))  
                        } else { //数组处理  
                            for (let i = 0; i < options.data[key].length; i++) {//  
                                res.push(encodeURIComponent(key) + '[]=' + encodeURIComponent(options.data[key][i]))  
                            }  
                        }  
                    } else {  
                        res.push(encodeURIComponent(key) + '=' + encodeURIComponent(options.data[key]))  
                    }  
                }  
                _config.data = res.join("&")  
            }
7***@qq.com

7***@qq.com

{"id[0]":1,"id[1]":2}

f***@outlook.com
6***@qq.com

6***@qq.com

2021-11.25 遇到同样问题。post 请求的参数里面有数组,content-type 为application/json。 在小程序工具中,查看netWork 出现一样问题
post 请求参数例如 params = {name:'test', testArr:['test1','test2']}
会被转成 params = {name:'test', testArr:{
'0':'test1',
'1':test2
}}

----------------------------------解决方法-------------------------------------

post 请求时,先把 params = JSON.stringify(params) 转成纯字符串
在自己封装的uni.request 的 http.js 中,即拦截层,做一层处理
uniRequest.interceptors.request.use(
(request) => {
request.data = JSON.parse(request.data)
}
)

该问题目前已经被锁定, 无法添加新回复