垂死病中驚坐起,笑問 Bug 何處來?! 1、先是大寫字母作祟 前兩天發佈了「柒留言」v2.0.0 新版本,結果...你懂的嘛,沒有 Bug 的程式不是好程式,寫不出 Bug 的程式員不是好程式員。 那個,有一兩個小 Bug 很正常的啦。 有用戶反饋,收到了留言回覆的通知,但是點進去沒有內容。怎麼會 ...
垂死病中驚坐起,笑問 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,就能正確傳遞了。
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 天,我會努力爬上來更新的,點擊下方「寫留言」一起討論呀,分享、討論才是更好的學習方式,搖起來。
本文首發於公眾號「我是玖柒後」,一起來踩坑吧!