suggestion 提供 POI 关键词联想补全能力:根据用户输入的片段返回匹配的地点建议,常用于搜索框的输入提示。
SDK 已固定 ret_coordtype=gcj02ll,返回的 location 可直接用于小程序地图,无需再做坐标转换。
其余参数与地点详情检索请求参数一致,会原样透传。
success 回调入参:
result 数组元素常见字段:
失败时走 fail 回调,入参统一为 { errMsg, message, statusCode, rawMessage },字段含义见"服务介绍 → 统一的回调约定"。
监听输入框内容,实时展示联想结果:
// pages/index/index.js// 引用百度地图微信小程序 JSAPI 模块const { BMapWX } = require('../../libs/bmap-wx.min.js');const bmap = new BMapWX({ ak: '您的ak' });Page({data: {keyword: '',suggestions: [],error: '',},onKeywordInput(e) {const keyword = e.detail.value.trim();this.setData({ keyword: e.detail.value, error: '' });if (!keyword) {this.setData({ suggestions: [] });return;}bmap.suggestion({query: keyword,region: '北京',city_limit: true,success: res => this.setData({ suggestions: res.result || [] }),fail: err => this.setData({ error: '联想失败:' + (err.message || err.errMsg) }),});},});
<!-- pages/index/index.wxml --><inputplaceholder="输入关键字,如:天安门"auto-focusvalue="{{keyword}}"bindinput="onKeywordInput"/><view wx:for="{{suggestions}}" wx:key="index"><text>{{item.name}}</text><text>{{item.city}}{{item.district}} {{item.address}}</text></view><view wx:if="{{error}}">{{error}}</view>
下图为官方 Demo"关键词联想"的运行界面,扫描下方小程序码即可直接体验。Demo 是产品化示例,界面比上面的示例代码精致,但调用方式与返回数据完全一致。


// pages/index/index.jslet timer = null; // 输入防抖let token = 0; // 请求序号,用于丢弃过期响应Page({onKeywordInput(e) {const keyword = e.detail.value.trim();this.setData({ keyword: e.detail.value });clearTimeout(timer);if (!keyword) {this.setData({ suggestions: [] });return;}// 停止输入 300ms 后才真正发起请求timer = setTimeout(() => {const current = ++token;bmap.suggestion({query: keyword,region: '北京',city_limit: true,success: (res) => {// 先发后到的响应会让结果回退到旧关键词,直接丢弃if (current !== token) { return; }this.setData({ suggestions: res.result || [] });},});}, 300);},onUnload() {clearTimeout(timer); // 页面卸载时清理,避免在已销毁实例上 setData},});
query 为空时不要发起请求,接口会返回参数错误。
需要限定城市时同时传 region 与 city_limit: true;只传 region 仍可能返回其他城市结果。
联想结果不含电话等详情,如需完整 POI 信息,可用选中项的 name 再调用 search。
上一篇
下一篇