问题描述:
在微信小程序里要做使用地址的关键字搜索功能,比如搜“火车站”出来跟火车站相关的列表,可供选择。
于是引入: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
。
完毕
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。