小程序数据请求get传值 参数中含有数组的解决方法

小程序开发过程中,后台需求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)
      }
    })
  });
}

你可能感兴趣的:(小程序,javascript)