Javascript Google Maps使用jquery从ajax添加标记
我正在尝试将谷歌地图添加到我的网页中,该网页具有指定宽度的雷达id的div。我使用jqueryajax方法从第二个页面获取坐标,并使用Marker将它们绘制在地图上。但仅显示最后一个标记,不显示其他标记Javascript Google Maps使用jquery从ajax添加标记,javascript,jquery,google-maps,google-maps-api-3,Javascript,Jquery,Google Maps,Google Maps Api 3,我正在尝试将谷歌地图添加到我的网页中,该网页具有指定宽度的雷达id的div。我使用jqueryajax方法从第二个页面获取坐标,并使用Marker将它们绘制在地图上。但仅显示最后一个标记,不显示其他标记 var global = new Array(); $(document).ready(function () { console.log("ready!"); if ($("#StartingDate").val() != ""
var global = new Array();
$(document).ready(function () {
console.log("ready!");
if ($("#StartingDate").val() != "") {
var start = $("#StartingDate").val();
var end = $("#EndingDate").val();
var id = $("#UserId").val();
$.ajax({
url: "GetData.aspx?StartingDate=" + start + "&EndingDate=" + end + "&UserId=" + id, async: false, success: function (result) {
var resp = result.split(",");
for (x = 0; x < resp.length - 1; x++) {
var cor = resp[x].split(";");
var lat = cor[0];
var lon = cor[1];
var date = cor[2]
var temp = [lat, lon, date];
global.push(temp);
}
}
});
}
});
$(document).ajaxComplete(function () {
var myLatlng = new google.maps.LatLng(-25.363882, 131.044922);
var mapOptions = {
zoom: 4,
center: myLatlng
}
var map = new google.maps.Map(document.getElementById("radar"), mapOptions);
for (var i = 0; i < global.length; i++) {
console.log(global[i]);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(parseFloat(global[i][0]),parseFloat(global[i][1])),
title: global[i][2]
});
marker.setMap(map);
}
});
Edit:事实证明,在发出
ajax
请求之前,您必须设置.ajaxComplete
处理程序,因为您已将async
设置为false
。
这是一个有效的例子
如果您打算稍后使用标记(即:移动或删除标记),我建议将标记保存在数组中
仅显示最后一个标记,因为您每次都会覆盖它。您需要做的是将标记保存在数组中
我要做的是创建一个函数addMarker
,它用给定的坐标和标题创建一个标记并返回它。
这看起来像这样:
global = [
[
0: "33.622835",
1: "73.062932",
2: "16/06/2015 1:17:24 AM"
],....
];
function addMarker(title, x, y, map){
var marker = new google.maps.Marker({
position: new google.maps.LatLng(x,y),
map: map,
title: title
});
return marker;
}
如果当前正在for循环中设置标记,则应调用此函数:
for (var i = 0; i < global.length; i++) {
console.log(global[i]);
markerArray[i] = addMarker(global[i][2], global[i][0], global[i][1], map);
}
for(变量i=0;i
markerArray
需要像global
一样是一个全局数组。虽然将标记放入数组是一个好主意,但您不必这样做,也不必解释为什么要这样做。除此之外,这不会改变所描述的问题。@MrUpsidown将标记放在数组中会有帮助,因为每次执行for循环时,您都会创建多个标记,而不是覆盖它。因为OP在他的代码中有一个for循环,所以我认为它之所以有帮助并不重要。是的,它应该解决这个问题。我使用了我为某个应用发布的代码,它对我起了作用。不,它不起作用。仍然显示一个marker@Timo不,这不能解决问题。在for循环中创建var标记
不是这里的问题。顺便说一句,这正是你的函数所做的。唯一的区别是代码被包装在一个函数中,并且将创建的标记放在一个数组中。没别的。我的错,我应该在发布答案之前测试代码。结果表明它不起作用,因为async
设置为false
,并且.ajaxComplete
处理程序是在ajax
请求完成后创建的。是一个工作示例代码>在for循环中返回?另一件事:为什么要在ajaxComplete上创建地图?您以前是否尝试过创建地图(例如在document ready中)?