問題描述:
在微信小程序裏要做使用地址的關鍵字搜索功能,比如搜“火車站”出來跟火車站相關的列表,可供選擇。
於是引入:qqmap-wx-jssdk.js,並且在js中調用:
map.search({
keyword: search, // 關鍵字,跟一個input綁定
page_size: 20,
auto_extend: 1,
success: function (res) {},
fail: function (res) {},
});
使用時發現問題:每當input的內容改變時,觸發search的調用,然後控制枱就會報錯message: "getLocation:fail 頻繁調用會增加電量損耗,可考慮使用 wx.onLocationChange 監聽地理位置變化",然後在短時間內(約10秒)無法再進行搜索,用户體驗很差。
奇了怪了,我只是調了map.search,沒調wx.getLocation啊,怎麼老是報這個錯呢?
解決方案
太長不看版本,直接給解決方案:search裏面加個屬性location,字符串,是當前所在經緯度用逗號隔開的。如:
map.search({
keyword: search, // 關鍵字,跟一個input綁定
page_size: 20,
auto_extend: 1,
location: `${latitude},${longitude}`, // 加上這個屬性
success: function (res) {},
fail: function (res) {},
});
然後問題就解決了
定位問題過程
説説我是怎麼定位問題的。
首先我們只調用了qqmap-wx-jssdk.js提供的api,卻出來意料之外的錯誤,八成是qqmap-wx-jssdk.js的問題。打開此js,搜索wx.getLocation,很幸運,代碼裏只有一個地方用到了,如下圖:
於是繼續搜索wx.getLocation所在的getWXLocation函數,看看是在哪裏,都是什麼情況調用的,如下圖:
於是繼續搜索這行代碼所在的函數locationProcess,看看param是在哪裏傳入的,結果發現是在我們所使用的map.search函數裏調用的,如下圖:
傳入location之後,邏輯就不走上面走下面了,發現代碼調用了一個checkLocation,於是去看checkLocation的邏輯,如下圖:
找到getLocationParam函數之後,明白了location的數據類型及結構,如下圖:
那麼就可以梳理出map.search大體的流程:調用map.search時,如果options裏沒有location,就會調getWXLocation;如果有,就不凋。location屬性可以是字符串,逗號分隔,也可以是一個對象,直接包含latitude和longitude。
完畢