这两天遇到一个问题,百度地图在循环加载多个信息窗口的时候所有的窗口显示的都是最后一条数据的内容
效果如下:
如图所示两个信息窗口都是一样的值,代码如下
$.ajax({
type: "POST",
url: "../api/zhandian.json",
success: function (res) {
var data = res.data;
for (var i = 0; i < data.length; i++) {
let coord = new BMapGL.Point(data[i].longitude, data[i].latitude);
let marker = new BMapGL.Marker(coord); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
let opts = {
width: 100, // 信息窗口宽度
height: 50, // 信息窗口高度
title: data[i].name, // 信息窗口标题
}
var infoWindow = new BMapGL.InfoWindow("地址:" + data[i].location + "<br>联系电话:" + data[i].phone, opts); // 创建信息窗口对象
marker.addEventListener("click", function () {
map.openInfoWindow(infoWindow, coord); //开启信息窗口
});
}
}, error: function () {
layer.msg("获取数据失败");
}
});
解决方法:将var infoWindow 修改为let infoWindow, 代码如下:
$.ajax({
type: "POST",
url: "../api/zhandian.json",
success: function (res) {
var data = res.data;
for (var i = 0; i < data.length; i++) {
let coord = new BMapGL.Point(data[i].longitude, data[i].latitude);
let marker = new BMapGL.Marker(coord); // 创建标注
map.addOverlay(marker); // 将标注添加到地图中
let opts = {
width: 100, // 信息窗口宽度
height: 50, // 信息窗口高度
title: data[i].name, // 信息窗口标题
}
let infoWindow = new BMapGL.InfoWindow("地址:" + data[i].location + "<br>联系电话:" + data[i].phone, opts); // 创建信息窗口对象
marker.addEventListener("click", function () {
map.openInfoWindow(infoWindow, coord); //开启信息窗口
});
}
}, error: function () {
layer.msg("获取数据失败");
}
});
效果: