小程序九九八十一难之跳转传参

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, "?") 去转化英文问号。

?

原文地址:https://www.cnblogs.com/lwcjy/p/11576693.html

时间: 2024-10-10 00:08:15

小程序九九八十一难之跳转传参的相关文章

订阅消息 | 小程序九九八十一坑之服务消息推送

微信团队前不久公测了「订阅消息」,原有的小程序模板消息接口将于 2020 年 1 月 10 日下线,届时将无法发送模板消息.「订阅消息」将完全替代「模板消息」,这两天得空测试了一波. 1.下发权限机制 我这边留言小程序用模板消息比较多,最有利的变化就是订阅消息只需用户授权即可,取消了模板消息的 formId,避免了获取.上传.储存.下发 formId 的流程,这个对开发者来说是好事. 同时将 7 天有效期的模板消息改成了用户自主订阅后,开发者可不限时间下发一条对应的服务消息,也就是没下发消息就永

程序猿想要功德圆满?无须九九八十一难,毕竟一劫年龄不是劫

程序员的劫 最近,又被程序员年龄的事情刷屏了.37岁被公司优化,找工作几个月都没有很好的归属,所谓的小公司还看不上.等等类似的话题变成了程序员的吐槽固定标题,无论是程序员,还是其他行业人员,都可以就这话题聊上一二. 最多的无非就是调侃,以及不解,各行各业的调侃,各行各业的不解. 程序员工作的相关行业,基本上都被理解为高收入的行业,程序员也成为了高收入的群体,相较于其他行业,有什么资格谈差异,更何况是所谓的抱怨. 揭开神秘的面纱,这个群体实则是底层的代表,程序员更成为苦逼的行业. 无论是996,还

七七四十九劫,九九八十一难

蒙差揭谛皈依旨 谨记唐僧难数清 金蝉遭贬第一难 出胎几杀第二难 满月抛江第三难 寻亲报冤第四难 出城逢虎第五难 折从落坑第六难 双叉岭上第七难 两界山头第八难 陡涧换马第九难 夜被火烧第十难 失却袈裟十一难 收降八戒十二难 黄风怪阻十三难 请求灵吉十四难 流沙难渡十五难 收得沙僧十六难 四圣显化十七难 五庄观中十八难 难活人参十九难 贬退心猿二十难 黑松林失散二十一难 宝象国捎书二十二难 金銮殿变虎二十三难 平顶山逢魔二十四难 莲花洞高悬二十五难 乌鸡国救主二十六难 被魔化身二十七难 号山逢怪二

小程序项目复盘(三) 用全局变量传参的问题

全局变量传参,在正确情况下用起来确实十分方便,任何页面都能取到全局变量,但也不能滥用,举两个我在项目中用到的例子: 1.在全局变量中设置一个userInfo,用来存储我登录后的用户全部信息,这个信息在其他页面都需要用到,节约了不少事情,这是事半功倍的正确做法: 还有一些用来标识页面类型的变量,在此不一 一举例了: 2.我在全局变量中设置了两个变量:  本意是在当前页面获得的信息中,想点击某个具体信息页面使之前获得的信息传进去.如果单看仅在两个页面之间传递,是行得通的,但是我在许多页面都使用到了这

微信小程序把玩(十一)icon组件

原文:微信小程序把玩(十一)icon组件 这些是提供的所支持的图标样式,根据需求在此基础上去修改大小和颜色. 主要属性: 使用方式: wxml <!--成功图标--> <icon type="success" size="40"/> <!--安全成功标志图标--> <icon type="safe_success" size="40"/> <!--提示信息图标-->

人生只有苦练七十二变,才能笑对八十一难

有人说,人的一生其实就是苦练七十二变,笑对八十一难.   这也是西游记这部电视剧带给我们的人生启示. 这世界,最难还的是人情,你多学一样本事傍身,就可以少说一句求人的话.   这世界,最难做到的是坚持,现在不狠心,将来就伤心,现在不努力,将来依然不会满意.   没有人,能够帮你一辈子.你想倒下,没人会扶你,你想奋斗,也没人会拦你,人这辈子,能靠的只有自己.   你拥有多少本事,能承受多少苦难,将来就可以向老天要多少人生.   要想将来有多优秀,现在就得有多拼命.   人活着,便注定了这辈子的奔波

微信小程序详解——页面之间的跳转方式【路由】和参数传递

微信小程序拥有web网页和Application共同的特征,我们的页面都不是孤立存在的,而是通过和其他页面进行交互,来共同完成系统的功能.今天我们来研究小程序页面之间的跳转方式. 1.先导 在Android中,我们Activity和Fragment都有栈的概念在里面,微信小程序页面也有栈的概念在里面.微信小程序页面跳转有四种方式: 1.wx.navigateTo(OBJECT): 2.wx.redirectTo(OBJECT): 3.wx.switchTab(OBJECT): 4.wx.navi

微信小程序 从含有tabbar的页面跳转到不含有tabbar的页面

如何离开含有tabbar的页面 在微信小程序开发过程中,我们会碰到从某页跳转到一个含有tabbar的页面的需求, 用 wx.navigateTo({url: '...',})  不起作用,需要使用 wx.switchTab({url: '...',}) 来实现. 那么,我们反过来,如何从含有tabbar的页面跳转到一个不含有/隐藏了tabbar的页面呢? 在尝试了上述的两个API后发现不起作用,wx.switchTab({url: '...',}) 倒是可以在有tabbar的页面之间跳转,但无法

【小程序技术点】navigator不能跳转到有tabBar页面的解决

在微信小程序开发中,页面包含tabBar能使整个页面变的美观而又整洁.与此同时,navigator能作为导航链接,很方便的跳转到其它页面. 但在使用的时候,很多人会发现直接使用navigator不能跳转到含有tabBar的界面.解决方法很简单,就是在使用navigator时加个参数,如下: <navigator url="/pages/index/index" class='white' open-type='switchTab'>开始</navigator>