微信小程序跳转传参参数丢失?
垂死病中惊坐起,笑问 Bug 何处来?!
1、先是大写字母作祟
前两天发布了「柒留言」v2.0.0 新版本,结果...你懂的嘛,没有 Bug 的程序不是好程序,写不出 Bug 的程序员不是好程序员。
那个,有一两个小 Bug 很正常的啦。
有用户反馈,收到了留言回复的通知,但是点进去没有内容。怎么会有 Bug 呢?肯定是你用的方法不对。
下班回到家的我立马打开开发者工具,一测试发现,果然,我是不可能写不出 Bug 的。
写 Bug 是一把好手,找 Bug 我也是不赖的,最后原因定位:参数没有正确传递。
A 页面
// a.wxml
<view data-testID="test" data-openid="msunh" bindtap="toB">B</view> // a.js
toB(e) {
var i = e.currentTarget.dataset;
wx.navigateTo({
url: '/pages/b?testID=' + i.testID + '&openid=' + i.openid,
})
console.log(i)
}
B 页面
// b.js
onLoad: function (options) {
this.setData({
testID: options.testID,
openid: options.openid
})
}
结果是:
很明显,openid 获得了正确参数,说明接收和传递过程毛问题,那就是传递之前 testID 就出错了。
控制台打印一下 dataset,发现没有, testID 变成了 testid。
这说明了什么?说明他在搞事情,他在搞我!这里把 testID 改成 testid,就能正确传递了。
数据绑定不能用大写,记住啊,兄die。(或者可以用大写绑定,小写获取,开心就好呀)
2、连一个 ? 都敢搞我?
改完 Bug 想着可以休息会,结果大半夜又有人找:回复读者失败了。
我试了一下,没发现他说的问题。便回复道:刷新一下?多试两次?换个网络?应该不是我这边的问题吧...
过了一会,这个老哥说还是不行,然后这个老哥大半夜还和我一起来找 Bug 了,感动,找到 Bug 我还特地发了个红包感谢。
最后发现数据在一个问号那里断开了,前面数据正常,后面数据被截断。仔细看下是因为用户输入了一个英文「?」??????
做个测试:
A 页面
// a.wxml
<view data-hello="你最近怎么样?我很好" bindtap="toB">toB</view>
// a.js
toB(e) {
var i = e.currentTarget.dataset;
wx.navigateTo({
url: '/pages/b?hello=' + i.hello,
})
}
B 页面
// b.js
onLoad: function (options) {
this.setData({
hello: options.hello,
})
}
结果 AppData 中是这样的:
果然是英文问号惹的麻烦,脑壳疼,连个「?」都来找麻烦,我好南南南南南南啊。
3、盘他
找到问题了就盘他,但这不能怪用户,鬼知道什么时候就输入了一个「?」。因为跳转路径中加参数也是用的「?」,所以这里应该是被误「?」后面带参。
最后我想了两种方法,这里供大家参考一下,如果有更好的方法,欢迎留言一起讨论。
I. 跳转页面的时候把 dataset 的数据写入缓存,到了新页面再读取缓存,这里就不啰嗦了,关键是第二种。
II. 利用 replace 把 ? 转化成 ?
但是这里有个问题,用 replace('?', '?') 的话,只能转化一次。
如果输入了多个英文问号呢?不排除这种可能,所以不建议用 replace('?', '?') ,推荐加入正则表达式,即 replace(/\?/g, "?") 去转化英文问号。
4、最后
柒块腹肌的玖柒回来了,有段时间没更新了,一直在忙着重写小程序,主要是我还没有想到更好的借口。
今年还有 101 天,我会努力爬上来更新的,点击下方「写留言」一起讨论呀,分享、讨论才是更好的学习方式,摇起来。
本文首发于公众号「我是玖柒后」,一起来踩坑吧!
微信小程序跳转传参参数丢失?的更多相关文章
- 微信小程序~跳页传参
[1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...
- 微信小程序跳转页面时参数过长导致参数丢失
问题描述: 微信小程序:跳转页面时传参,参数过长导致参数丢失 跳转到文章详情页时,使用的文章链接e.currentTarget.dataset.id过长导致参数丢失 handleClickArticl ...
- 微信小程序页面返回传参的问题
比如提交问题,然后需要返回之前页面,由于onLoad只会加载一次,所以不会触发,但是我们页面又需要刷新,那怎么办? 1.onLoad与onShow区别 onLoad:监听页面加载.一个页面只会调用一次 ...
- 微信小程序wx.switchTab传参问题
业务背景:从提问跳到列表需要刷新,以显示刚提交的数据. 但是官方文档 wx.switchTab 明确指明路径后是不能带参数的,怎么办? 网上有很多解决方案是:switchTab成功跳转后调用succe ...
- 微信小程序之页面传参
效果图: 点击编辑值传过去了,那么编辑支出类型这个界面又是如何获取到值呢? 传值代码: type.js editType: function (e) { var typeId = e.currentT ...
- 微信小程序 wx.navigateTo()传参及多个参数方法
var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...
- 小程序跳转传参参数值为url时参数丢失
通过先encodeURIComponent,取到值以后再decodeURIComponent,拼接参数正常传递 A页面 switch: function (e) { var aa = 'UNNZVUf ...
- 微信小程序跳转函数总结
微信小程序跳转函数总结 笔者在微信小程序前端的开发过程中,在不同的情况下遇到了需要使用不同的页面跳转逻辑的情况,以下是我对这些函数的使用场景的一个总结介绍. wx.navigateTo 这是最常用 ...
- 两百条微信小程序跳坑指南(不定时更新)
微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...
随机推荐
- Ghost手动备份、还原系统详细图文教程
1.Ghost工具下载 https://pan.baidu.com/s/10cpRhhjJAHZb5PPZo6ghvw 2.备份.还原详细步骤请参考 https://jingyan.baidu.com ...
- Android设计模式—观察者模式
装载请标明出处:https://www.cnblogs.com/tangZH/p/11175120.html 观察者模式 说白了,就是一个对发生改变,所有依赖于它的对象也发生改变,这是一对多的关系. ...
- <深度学习>Tensorflow遇到的坑之一
AttributeError: module 'tensorflow' has no attribute 'random_normal' AttributeError: module 'tensorf ...
- 面试连环炮系列(二):你们的项目Redis做了集群部署吗
你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案 ...
- 工具类Arrays.asList()方法把数组转换成集合
工具类Arrays.asList()方法把数组转换成集合 不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException() 问 ...
- 使用 ASP.NET Core MVC 创建 Web API(六)
使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...
- xms新版发布
基于.net core 3.0.101 github地址: https://github.com/migomiddle/xms 码云地址: https://gitee.com/migomiddle/x ...
- Redisson基本用法
1. Redisson Redisson是Redis官方推荐的Java版的Redis客户端.它提供的功能非常多,也非常强大,此处我们只用它的分布式锁功能. https://github.com/re ...
- oracle中创建用户、角色、权限、表空间简单使用
一.数据库用户 创建数据库用户 create user 用户名 identified by 密码; 授权 grant 权限名 to 用户名; 查看当前用户权限 select * from sessio ...
- ling to sql创建临时变量 let的使用
使用let赋值给临时变量 var dailys = from f in _postgreDbContext.draws let temp = f.review_time.Value.Date wher ...