小程序开发过程中,后台需求get传值,但是get传值无法在域名后面拼接数组类型参数,然而前端数据参数中含有数组类型,导致请求一直无法完成。
例如:前端请求参数如下,要求get传值给后台
// 请求数据接口(错误示范 : 参数不对请求失败报错,因为参数中含有数组,无法解析)
const params = {
page: 1,
limit: 20,
isArray:[0,1,2]
}
this.request(api, params ).then(function (res) {
if (res.errno == 0) {
console.log(res.data.items)
}
});
// 请求数据接口(正确示范 : 请求成功)
// 将 isArray:[0,1,2] 写成 isArray:'0,1,2' 这种形式
const params = {
page: 1,
limit: 20,
isArray:'0,1,2'
}
this.request(api, params ).then(function (res) {
if (res.errno == 0) {
console.log(res.data.items)
}
});
第二种方式请求成功是因为get传值时,参数是数组允许的格式为
?isArray=0&isArray=1&isArray=2
或者
isArray=0,1,2
所以第二种方式请求成功。
也许会有疑问
参数
为什么不写成以下方式:
**
const params = {
page: 1,
limit: 20,
isArray:0,
isArray:1,
isArray:2,
}
之所以不这么写是应为,在请求数据时,最后一个isArray参数会覆盖之前同名的参数值。
/**
* 封封微信的的request
*/
function request(url, data = {}, method = "GET") {
return new Promise(function (resolve, reject) {
wx.request({
url: url,
data: data,
method: method,
header: {
'Content-Type': 'application/json',
'X-Litemall-Token': wx.getStorageSync('token')
},
success: function (res) {
if (res.statusCode == 200) {
if (res.data.errno == 501) {
// 清除登录相关内容
try {
wx.removeStorageSync('userInfo');
wx.removeStorageSync('token');
} catch (e) {
// Do something when catch error
}
// 切换到登录页面
// wx.navigateTo({
// url: '/pages/auth/login/login'
// });
} else {
resolve(res.data);
}
} else {
reject(res.errMsg);
}
},
fail: function (err) {
console.log(err);
reject(err)
}
})
});
}
版权声明:本文为lai260172331原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。