微信小程序获取扫描二维码后携带的参数(值)

本文详细介绍了在微信小程序中如何正确解析二维码携带的参数,尤其是在正式发布后与开发阶段的不同处理方式。通过decodeURIComponent和字符串操作,实现了参数的存储与读取。
onLoad(options) {
    if (options.scene) {
      console.log("has scene");
      var scene = decodeURIComponent(options.scene);
      console.log("scene is ", scene);
      var arrPara = scene.split("&");
      var arr = [];
      for (var i in arrPara) {
        arr = arrPara[i].split("=");
        wx.setStorageSync(arr[0],arr[1]);
        console.log("setStorageSync:",arr[0],"=",arr[1]);
      }
    } else {
      console.log("no scene");
    }
  },

记录一下坑!!!!!!!!!!!

开发阶段

onLoad (option) {
  console.log(option)
}

这时可以接收到 拿着参数去请求数据等等操作~

假如你的小程序要发布

这时候应该改变获取参数的方式,因为正式发布后的获取的参数和在开发者工具中是不一样的,这个坑!!!。下面代码是你获取正式发布小程序后的入口二维码中参数的代码,scene是微信生成二维码方法的一个参数,用来写你要在二维码中携带的参数

onLoad (option) {
  console.log(option)
  if (option.scene) {
    let obj = decodeURIComponent(option.scene)
    ... // 这里就是你拿着参数obj进行操作
  }
}

decodeURIComponent详解

微信小程序中,通过扫描二维码获取二维码携带参数,通常有以下几种方式,具体取决于二维码的生成方式和用途。 ### 1. 通过 `onLoad` 生命周期函数获取 `scene` 参数 当用户扫描二维码进入小程序时,可以通过页面的 `onLoad` 函数获取二维码携带的 `scene` 参数。该参数开发和正式环境中行为一致,但需要注意在正式环境中,`scene` 的是经过 `encodeURIComponent` 编码的,因此需要使用 `decodeURIComponent` 进行解码。 ```javascript Page({ onLoad(option) { if (option.scene) { const scene = decodeURIComponent(option.scene); console.log('获取到的 scene 参数:', scene); } } }); ``` 此方法适用于通过微信官方生成的二维码,其中 `scene` 字段的会作为查询参数传递给小程序页面 [^2]。 --- ### 2. 获取 `q` 参数(适用于二维码内容为小程序路径) 如果二维码的内容是一个小程序页面路径(例如:`pages/index/index?query=1`),则可以通过 `onLoad` 函数中的 `q` 参数获取完整的 URL 查询字符串。此时同样需要使用 `decodeURIComponent` 来解码。 ```javascript Page({ onLoad(option) { if (option.q) { const urlParams = decodeURIComponent(option.q); console.log('二维码中的完整 URL 参数:', urlParams); } } }); ``` 该方式适用于通过调用微信接口生成的二维码,其内容为小程序页面路径并携带参数的情况 [^3]。 --- ### 3. 动态解析二维码内容(适用于自定义二维码内容) 如果二维码的内容是自定义的字符串(例如:`https://example.com?param1=value1`),则可以使用 `decodeURIComponent` 解码后手动解析 URL 查询参数。可以借助 URL 解析工具库或自行实现解析函数。 以下是一个简单的 URL 参数解析函数示例: ```javascript function parseQueryString(queryString) { const query = {}; const pairs = decodeURIComponent(queryString).split('&'); for (let i = 0; i < pairs.length; i++) { const pair = pairs[i].split('='); if (pair[0]) { query[pair[0]] = pair[1] || ''; } } return query; } Page({ onLoad(option) { if (option.scene) { const scene = decodeURIComponent(option.scene); const params = parseQueryString(scene); console.log('解析后的参数:', params); } } }); ``` --- ### 注意事项 - 在开发阶段,可以通过开发者工具手动设置 `scene` 参数进行模拟测试,但需确保使用 `encodeURIComponent` 编码后再传入。 - 正式发布后,`scene` 或 `q` 参数均为编码后的字符串,必须使用 `decodeURIComponent` 解码才能获取原始数据 [^1]。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值