JS:正确的获取GET数据,并存在全局变量中

// 因只需获取1次,所以由立即执行函数获取,并支持多选:多选格式=[{k:二维键名,v:数据},...]
const GET = (function () {
  let r = {}
    // 获取请求数据,但因键名中可能存在'&',所以此时还不能转码
    , a = location.search.substring(1).split('&')
    , i = 0, j = a.length, k, v
  for (; i < j; i++) {
    k = a[i].indexOf('=')
    // 转码
    if (k === -1) {
      v = ''
      k = decodeURIComponent(a[i])
    } else {
      v = decodeURIComponent(a[i].substring(k + 1))
      k = decodeURIComponent(a[i].substring(0, k))
    }
    // 多选判断
    let k1 = k.indexOf('['), k2 = k1 === -1 ? -1 : k.indexOf(']', k1 + 1)
    if (k2 === -1) r[k] = v
    else {// 是多选时
      k = k.substring(0, k1)// 1维键名
      // 添加到对象数组中
      if (typeof r[k] !== 'object') r[k] = []
      r[k].push({ k: k.substring(k1 + 1, k2), v: v })
    }
  }
  return r
})();

根据url规则,需要特别注意的地方:

  1. url的传参部分,包含特殊字符会自动转码,所以后期必须解码
  2. 特殊字符包含:&?=# 等,所以不能在分离等号前进行解码
  3. name为空时,即是后面有等号,也不会上传此数据
  4. name名重复时,只会获取最后的那一个数据
  5. 手动书写url时,?作为name时不用转码,但=和&作为name时必须转码。(由此可见,规范命名name的重要性)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值