RequestTask | 微信文本文档 (q

lxf2023-03-17 13:13:01

直接用编码

uni.request({
  url: 'example.php', //仅是实例,并不是真实接口地址
  method: 'GET',
  data: {
    x: [1,2],
    y: '2'
  }
})

以上这一段编码,在支付宝小程序和小程序中,分析出去的参数是一致的嘛?先讲结论,答案就是不一致。 我们来看一下二者最后形成的参数有什么不同吧。

// example.php?x=[1,2]&y=2 -- 手机微信
// example.php?x=1&x=2 -- 支付宝钱包

为什么是这样的,检查了手机微信/支付宝钱包/uni-app的文本文档,发觉三者对data的分析标准是一模一样的。 肯定是分析标准升级了,可是文本文档并没有实时同步。猜测得话,uni-app只是单纯封装形式,一般不会对实际 data的解析方法开展特别处理,那么可能便是支付宝小程序对data分析标准进行调整。

看文本文档是如何解析data的

RequestTask | 微信文本文档 (q

wx.request({
  url: 'example.php', //仅是实例,并不是真实接口地址
  method: 'GET',
  data: {
    x: '1',
    y: '2'
  }
})
// 依照文本文档所显示,能把这一get要求转化为这种`example.php?x=1&y=2`

// 那这个时候大家,传送的参数是一个二维数组得话,相近那样
const data = {
   x: [1,2],
   y: 2
}
// 依照文本文档,能把这一要求分析为:`example.php?x=[1,2]&y=2`

支付宝钱包/uni-app的描述的截图也不放,跟微信没有区别。需要更为全面的了解,请戳下面连接

RequestTask | 微信文本文档 (qq.com)

为何支付宝小程序分析出的跟文本文档不一致呢

按理说照文本文档讲的,那样应当是一致的,但在具体研发流程的检验发觉。确实没依照文本文档所讲的。 那样估计就是支付宝小程序的网络相关编码升级了,可是官网文本文档并没有实时同步。

我们当时所使用的支付宝小程序开发环境版本号为:version3.1.3,小程序基础库2.7.x

恰好大家新项目要先做支付宝小程序的,而支付宝小程序的分析标准,阴差阳错刚合乎我们的需求,并没有注意到这种情况,后边新项目必须兼容到小程序中,才发现了这个难题。那我们就必须对小程序开展特别处理了。将相近{data:{x: [1,2]}}的信息,分析为x=1&x=2这种。

最初我看的这一GET要求的参数都是满新颖的,为什么参数key是反复的。

这类插口这难道不是应该使用POST嘛?

后来的我想,应当是这样的画面,在我们必须查看某好多个产品的详细信息信息内容得话,GET要求比较接近restful设计规范。由于这个姿势是获得,并没进行更新,删掉,实际操作等操作, 因此设计成GET,

那么为什么key值能反复呢?

怎么不这样设计了{data:{x: '1,2'}}, 运用分号或是|切分同样key的参数。对于这些设计思想,就不太清楚了。虽然不清楚,从前的设计思想,但我却获得了一个小知识要点,不错不错!

针对小程序的适配解决

// 以下属于简单例子编码
let urlParams = '?' // 分析后的参数
// data 意味着要求传达的数据信息
keys(data).forEach((key) => {
  const val = data[key]
  if (Array.isArray(val) && val.length) {
    val.forEach((item) => {
      urlParams  = `${key}=${item}&`
    })
  } else {
    urlParams  = `${key}=${val}&`
  }
})
if (urlParams.length > 1) {
  urlParams = urlParams.substring(0, getUrlParams.length - 1)
}

XMLHttpRequest.send

我在这里,简单备考下,XMLHttpRequest.send发送数据时,参数种类能够为何。

  • 能够为 Document, 在这样的情况下,他在推送曾经被实例化。
  • 能是 Blob,BufferSource,FormData,URLSearchParams, 或是 USVString 目标
  • null

具体戳这儿备考 - XMLHttpRequest.send() - Web API 插口参照 | MDN (mozilla.org)

末尾

知识要点虽然不大,可是还是很难留意到,也有这种参数优化方法。原本GET要求的参数是字符串数组,因此传送只要满足字符串数组就能,可是按照我经常出现的思维定势,毫无疑问惦记着key不必反复。没成想还有样的写法,也算是见识到了。

若有不正确,恳求纠正

打开AdminJS成长之路!这个是我参加「AdminJS日新的目标 · 2 月更文考验」第 4 天,查看更多活动规则