垂死病中惊坐起,笑问 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. 微信小程序~跳页传参

    [1]需求: 点击商品,跳到相应商品详情页面 [2]代码: (1)商品列表页 <view class="goodsList"> <view wx:for=&quo ...

  2. 微信小程序跳转页面时参数过长导致参数丢失

    问题描述: 微信小程序:跳转页面时传参,参数过长导致参数丢失 跳转到文章详情页时,使用的文章链接e.currentTarget.dataset.id过长导致参数丢失 handleClickArticl ...

  3. 微信小程序页面返回传参的问题

    比如提交问题,然后需要返回之前页面,由于onLoad只会加载一次,所以不会触发,但是我们页面又需要刷新,那怎么办? 1.onLoad与onShow区别 onLoad:监听页面加载.一个页面只会调用一次 ...

  4. 微信小程序wx.switchTab传参问题

    业务背景:从提问跳到列表需要刷新,以显示刚提交的数据. 但是官方文档 wx.switchTab 明确指明路径后是不能带参数的,怎么办? 网上有很多解决方案是:switchTab成功跳转后调用succe ...

  5. 微信小程序之页面传参

    效果图: 点击编辑值传过去了,那么编辑支出类型这个界面又是如何获取到值呢? 传值代码: type.js editType: function (e) { var typeId = e.currentT ...

  6. 微信小程序 wx.navigateTo()传参及多个参数方法

    var workModeAndPriceList = res.data.data.workModeAndPriceList; //var result = JSON.stringify(workMod ...

  7. 小程序跳转传参参数值为url时参数丢失

    通过先encodeURIComponent,取到值以后再decodeURIComponent,拼接参数正常传递 A页面 switch: function (e) { var aa = 'UNNZVUf ...

  8. 微信小程序跳转函数总结

    微信小程序跳转函数总结 ​ 笔者在微信小程序前端的开发过程中,在不同的情况下遇到了需要使用不同的页面跳转逻辑的情况,以下是我对这些函数的使用场景的一个总结介绍. wx.navigateTo 这是最常用 ...

  9. 两百条微信小程序跳坑指南(不定时更新)

    微信小程序联盟出品 跳坑textarea<二百二十三>不显示文本及textarea相关问题集合跳坑<二百一十三> background-image无法获取本地资源图片....跳 ...

随机推荐

  1. Ghost手动备份、还原系统详细图文教程

    1.Ghost工具下载 https://pan.baidu.com/s/10cpRhhjJAHZb5PPZo6ghvw 2.备份.还原详细步骤请参考 https://jingyan.baidu.com ...

  2. Android设计模式—观察者模式

    装载请标明出处:https://www.cnblogs.com/tangZH/p/11175120.html  观察者模式 说白了,就是一个对发生改变,所有依赖于它的对象也发生改变,这是一对多的关系. ...

  3. <深度学习>Tensorflow遇到的坑之一

    AttributeError: module 'tensorflow' has no attribute 'random_normal' AttributeError: module 'tensorf ...

  4. 面试连环炮系列(二):你们的项目Redis做了集群部署吗

    你们的项目Redis做了集群部署吗? 我们有大量数据需要缓存,而单实例的容量毕竟是有限的,于是做了Redis集群部署. 采取的方案是什么,Codis还是Redis Cluster,为什么要选择这个方案 ...

  5. 工具类Arrays.asList()方法把数组转换成集合

    工具类Arrays.asList()方法把数组转换成集合 不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException() 问 ...

  6. 使用 ASP.NET Core MVC 创建 Web API(六)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  7. xms新版发布

    基于.net core 3.0.101 github地址: https://github.com/migomiddle/xms 码云地址: https://gitee.com/migomiddle/x ...

  8. Redisson基本用法

    1.  Redisson Redisson是Redis官方推荐的Java版的Redis客户端.它提供的功能非常多,也非常强大,此处我们只用它的分布式锁功能. https://github.com/re ...

  9. oracle中创建用户、角色、权限、表空间简单使用

    一.数据库用户 创建数据库用户 create user 用户名 identified by 密码; 授权 grant 权限名 to 用户名; 查看当前用户权限 select * from sessio ...

  10. ling to sql创建临时变量 let的使用

    使用let赋值给临时变量 var dailys = from f in _postgreDbContext.draws let temp = f.review_time.Value.Date wher ...