微信小程序跳轉傳參參數丟失?

垂死病中驚坐起,笑問 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.jstoB(e) {  var i = e.currentTarget.dataset;  wx.navigateTo({    url: '/pages/b?testID=' + i.testID + '&openid=' + i.openid,  })  console.log(i)}​​​​​
B 頁面// b.jsonLoad: 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.jstoB(e) {  var i = e.currentTarget.dataset;  wx.navigateTo({    url: '/pages/b?hello=' + i.hello,  })}​​​​​​
B 頁面// b.jsonLoad: function (options) {  this.setData({    hello: options.hello,  })}

結果 AppData 中是這樣的:

果然是英文問號惹的麻煩,腦殼疼,連個「?」都來找麻煩,我好南南南南南南啊。

 

3、盤他

找到問題了就盤他,但這不能怪用戶,鬼知道什麼時候就輸入了一個「?」。因爲跳轉路徑中加參數也是用的「?」,所以這裏應該是被誤「?」後面帶參。

最後我想了兩種方法,這裏供大家參考一下,如果有更好的方法,歡迎留言一起討論。

I. 跳轉頁面的時候把 dataset 的數據寫入緩存,到了新頁面再讀取緩存,這裏就不囉嗦了,關鍵是第二種。

II. 利用 replace 把 ? 轉化成 ?

但是這裏有個問題,用  replace('?', '?') 的話,只能轉化一次。

如果輸入了多個英文問號呢?不排除這種可能,所以不建議用  replace('?', '?') ,推薦加入正則表達式,即 replace(/\?/g, "?") 去轉化英文問號。

 

4、最後

柒塊腹肌的玖柒回來了,有段時間沒更新了,一直在忙着重寫小程序,主要是我還沒有想到更好的藉口。

今年還有 101 天,我會努力爬上來更新的,點擊下方「寫留言」一起討論呀,分享、討論纔是更好的學習方式,搖起來。

本文首發於公衆號「我是玖柒後」,一起來踩坑吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章