Javascript 如何使用传单和Ajax更新弹出式内容(第2部分)
这个问题是本书的“第二集”: 嗨 我的地图还是有问题。事实上,我相信上面链接中的解决方案解决了我的问题,但我发现了另一个问题 我的代码和目标与这个问题的“第一集”几乎相同 作为提醒,我有一张传单地图,它使用MarkerCluster显示约36.000个标记。每个标记必须有一个包含许多信息的弹出窗口(单击时显示) 由于一次获取的信息太多(我的意思是一次获取所有点和所有信息),我想获取纬度、经度和单个ID,以便在地图上显示标记。接下来,当单击弹出窗口时,脚本使用每个标记包含的单个ID发出Ajax请求以从数据库获取信息 现在,在maximkou的大力帮助下,我可以做到这一点。我的问题是,只有最后一个ID被考虑,所以它总是请求相同的ID,总是显示相同的信息(这不是我试图做的)。 我尝试了很多事情(比如在地图上找到所有的标记,尝试在阵列上放置标记等等),但我不知道如何找到这项工作 我不认为这是不可能的(但也许是),我认为我只是缺乏Javascript方面的技能 如果您有其他的解决方案或想法,我将很高兴测试它 现在,我将向您展示我当前代码的摘录:Javascript 如何使用传单和Ajax更新弹出式内容(第2部分),javascript,ajax,leaflet,leaflet.markercluster,Javascript,Ajax,Leaflet,Leaflet.markercluster,这个问题是本书的“第二集”: 嗨 我的地图还是有问题。事实上,我相信上面链接中的解决方案解决了我的问题,但我发现了另一个问题 我的代码和目标与这个问题的“第一集”几乎相同 作为提醒,我有一张传单地图,它使用MarkerCluster显示约36.000个标记。每个标记必须有一个包含许多信息的弹出窗口(单击时显示) 由于一次获取的信息太多(我的意思是一次获取所有点和所有信息),我想获取纬度、经度和单个ID,以便在地图上显示标记。接下来,当单击弹出窗口时,脚本使用每个标记包含的单个ID发出Ajax请求
function makeMap(pointsToInsert){
if (typeof map != 'undefined') {
map.off();
map.remove();
}
var tiles=L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/streets-v9/tiles/256/{z}/{x}/{y}?access_token=', {
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://mapbox.com">Mapbox</a>',
maxZoom: 20,
}),
latlng = L.latLng(48.8557, 2.3600);
var map = L.map('map', {center: latlng, zoom: 9, zoomControl:false, layers: [tiles]});
var arr = JSON.parse(pointsToInsert); //pointsToInsert come from a PHP script call before
var markers = L.markerClusterGroup();
for (var i = 0; i < arr.length; i++) {
var a = arr[i];
var ID = a[0];
var lat = a[1];
var lon = a[2];
var marker = L.marker(new L.LatLng(lat, lon));
marker.bindPopup(ID);
markers.addLayer(marker);
marker.on('click', function () {
var datas = marker.getPopup().getContent();
var popup = L.popup()
.setLatLng(this.getLatLng())
.setContent("Loading ...")
.openOn(map);
$.ajax({
url: 'getInfos.php',
type : 'POST',
data : "id=" + datas,
dataType: 'html',
success: function (data) {
popup.setContent(data);
},
error : function(resultat, statut, erreur){
alert("Error");
},
});
});
}
map.addLayer(markers);
}
函数makeMap(pointsToInsert){
如果(映射类型!=“未定义”){
map.off();
map.remove();
}
var tileLayer=L.tileLayer('https://api.mapbox.com/styles/v1/mapbox/streets-v9/tiles/256/{z} /{x}/{y}?访问_令牌='{
属性:“地图数据©;贡献者,图像©”,
maxZoom:20,
}),
latlng=L.latlng(48.8557,2.3600);
var map=L.map('map',{center:latlng,zoom:9,zoomControl:false,layers:[tiles]});
var arr=JSON.parse(pointsToInsert);//pointsToInsert来自之前的PHP脚本调用
var markers=L.markerClusterGroup();
对于(变量i=0;i
我需要一些帮助
如果你想让我更具体或添加其他摘录,请让我知道
提前感谢您的问题很简单。只需替换这一行:
var data=marker.getPopup().getContent()代码>带有:var data=this.getPopup().getContent()代码>出现此问题是因为var标记对应于您附加到映射的最后一个标记。如果你需要更多的帮助,请说出来。真不敢相信这么简单,非常感谢!正如我所说,我缺乏jss方面的技能。。。再次感谢