a)真正的笑话第一:多年来购买微软的东西终于有了回报。。尝试使用Chrome进行调试时,我的地图只显示了一个标记。在setTimeout期间,它处于正确的位置,闪烁了一小部分秒,回到了相同的位置。在某个时间,错误地将代码发送到Explorer。。。。。。。瞧。。。代码遍历数据库,但不对每个标记使用setTimeout。在Explorer中,setTime out(例如,5秒)意味着所有标记都将显示在正确的信息窗口中,但所有标记都是5秒。时间越长,它在其中一个标记上停留的时间就越长(总是同一个),在其他标记上的速度就非常快。在chrome,迭代太快了,我看不到其他平台的迭代。只是眨眼而已。
b) 我想问题是getJson(或Ajax),使用for循环或$.each(我使用了各种组合…..),与函数changeMarker中的另一个循环组合。所以有两个循环同时进行。然而,我不知道如何修复它。如果我在$.each或for循环之后关闭Ajax(或getJson),那么其余的代码就不会得到值。什么也没发生(只是我的警报,用于调试目的)。
不,我不完全理解闭包。是的,我读了很多东西,主要的在这里,但也在这里,这里,那里。但仍然没有弄清楚:/
c) 作为一个新手,连续几天试图解决一个问题并不容易。。。却没有得到解决。
任何帮助都将不胜感激!
这里是代码-省略了一个很长的部分,地图可以获得个人选择。
var BERLIN = new google.maps.LatLng(-32.517683, -46.394393);
var map = null;
var marker = null;
var index = 0;
var infoWindow = null;
var latlng ;
var MY_MAPTYPE_ID = 'custom_style';
function initialize() {
//personal options not included here.
var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);
map.mapTypes.set(MY_MAPTYPE_ID, customMapType);
$.getJSON('php/locationsJson.php',function(json){
$.each( json, function(i, item) {
var lat = this.lat;
var lng = this.lng;
var location = new google.maps.LatLng(json[i].lat,json[i].lng);
alert( json[i].lat +','+json[i].lng );
function dropMarker (map, pos){
return new google.maps.Marker({
map: map,
position: location,
draggable: false,
}); // return
}
function changeMarker() {
if (marker) {
infoWindow.close();
marker.setMap(null);
}
var pos = location[index];
marker = dropMarker(map,pos);
var contentString = ('lat: ' + location.lat() + '<br />' + 'lng: ' + location.lng())
infoWindow.setContent(contentString);
setTimeout(function () {
infoWindow.open(map, marker);
}, 100);
index = (index + 1) % json.length;
setTimeout(function () {
changeMarker();
}, 4000);
}
var customMapType = new google.maps.StyledMapType(featureOpts, styledMapOptions);
infoWindow = new google.maps.InfoWindow()
changeMarker();
}); //$.each
}); //end of getjson
} //end of initialized
以下是AJAX之前的代码fiddle(感谢您的帮助)。我试着在fiddle中添加json文件,但在fiddl中添加json太复杂了。
再次感谢您抽出时间。
由于您的方法运行良好,因此不需要对
进行太多修改通过ajax实现。
不是在循环内启动超时,而是只使用循环来填充NEIGBORHOODS数组,并且在循环调用changeMarker()
之后
$.getJSON:的成功回调
function(json){
NEIGBORHOODS=[];
$.each(json,
function(){
NEIGBORHOODS.push(new google.maps.LatLng(this.lat,this.lng));
});
changeMarker();
}
代码的其余部分可能会保持原样。
处理ajax请求:http://jsfiddle.net/doktormolle/CVECG/
(注意:在fiddle中,我使用了$.post()
,因为jsfiddle需要JSON的post请求,所以您可以在应用程序中使用$.getJSON
)