小程式九九八十一坑之跳轉傳參

来源:https://www.cnblogs.com/msunh/archive/2019/09/22/11566615.html
-Advertisement-
Play Games

垂死病中驚坐起,笑問 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,就能正確傳遞了。

數據綁定不能用大寫,記住啊,兄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 天,我會努力爬上來更新的,點擊下方「寫留言」一起討論呀,分享、討論才是更好的學習方式,搖起來。

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 垃圾分類助手-生活的好幫手的技術支持,如果您使用中出現什麼問題或者對我們產品有什麼改進建議,請隨時與我聯繫。 電話:15990075212 郵箱:[email protected] 應用簡介 垃圾分類小助手-生活的好幫手能夠快速搜索垃圾分類,高效率識別垃圾分類,輕鬆解決垃圾分類難題 ...
  • Vue以前聽說過,有瞭解過一點。當時還在熱衷於原生JavaScript去寫一些方法的封裝,不是為啥,就感覺這樣很帥,後面多多少少接觸了一些JQuery的用法,到現在為止,JavaScript原生封裝的一些方法,該忘的都忘了。上一家公司需要用到Vue,所以就利用下班的時候學習Vue。有次公司部門的培訓 ...
  • 點擊導航菜單,切換選中狀態 效果: 思路:首先獲取選中的URL,再通過正則判斷是否相同,相同就加上相應的屬性,不相同就去除相應的屬性。 html代碼 JQ代碼 ...
  • 先上完成的效果圖:列是根據查詢結果增加的 數據格式: 表頭的數據取出: element table中: 表格內數據整理: 左側表頭合併:需要註意的是,當有固定列的時候需要設置表格的max-height屬性,不然會出現列空白 <el-table :data="tableData" span-metho ...
  • 一.vue基礎 "Vue的介紹及安裝和導入" "Vue的使用" "Vue成員獲取" "Vue中的迴圈以及修改差值表達式" "vue中methods,computed,filters,watch的總結" "Vue中組件" "Vue中插槽指令" "Vue部分編譯不生效,解決Vue渲染時候會閃一下" 二. ...
  • 1、絕對定位 絕對定位指的是通過規定HTML元素在水平和垂直方向上的位置來固定元素,基於絕對定位的元素不會占據空間。 絕對定位的位置聲明是相對於已定位的並且包含關係最近的祖先元素。如果當前需要被定為的元素沒有已定位的祖先元素作為參考值,則相對於整個網頁。 position:absolute; 1 < ...
  • 水平居中(包含塊中居中)1. 定寬,左右margin為auto。(常規流塊盒、彈性項目[不用定寬]) 例子:在box1盒子上設置寬,再設置margin:auto; 得到的效果: 2. 彈性盒設置justify-content: center,讓彈性項目在主軸上居中。(普遍適應) 例子:在其父元素上設 ...
  • 一、HTMLhtyper text markup language 即超文本標記語言超文本: 就是指頁面內可以包含圖片、鏈接,甚至音樂、程式等非文字元素。標記語言: 標記(標簽)構成的語言.網頁==HTML文檔,由瀏覽器解析,用來展示的靜態網頁:靜態的資源,如xxx.html 動態網頁:html代碼... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...