以下代码在firefox和IE9上运行正常,但在IE8上更新标记时出现问题。我得到“SCRIPT16389:未指定的错误.main.js,第20行字符313”,一旦创建的标记没有使用新的数据集更新
我的newdata.json格式是
{
"points": [
{
"lat": "-28.0000",
"long": "133.1500",
"id": 0
},
{
"lat": "-28.4710",
"long": "153.3443",
"id": 1
}
]
}
及以下是获取json并使用聚类显示点
的脚本var map=null;
var markersArray = [];
var markerCluster= null;
google.load('maps', '3', {
other_params: 'sensor=true'
});
google.setOnLoadCallback(initialize);
function initialize() {
var mapcentre = new google.maps.LatLng(-29,135);
var mapOptions = {
zoom: 5,
center: mapcentre,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById('map'), mapOptions);
startTimer();
}
function startTimer(){
setInterval(function() {
deleteOverlays();//should delete any existing point and clear the cluster
addMarker();
},3000);
}
function addMarker() {
$.ajax({
type: "GET",
url: "newdata.json",
async: false,
dataType: "json",
success: function(data){
for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) {
var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long);
var marker = new google.maps.Marker({
position: latLng
});
markersArray.push(marker);
}
markerCluster = new MarkerClusterer(map, markersArray);
}
});
}
// Deletes all markers in the array by removing references to them
function deleteOverlays() {
if (markersArray.length > 0) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
if(markerCluster!= null) {
markerCluster.clearMarkers();
}
}
在IE8上,地图加载正常,初始数据显示正常,但新数据没有更新,所以我想deleteOverlays有问题吗?
答案 0 :(得分:0)
一件非常错误的事情是for / in循环用于对象而不是数组。我一直很讨厌IE,但现在越来越多的人似乎是在我希望其他人都愿意的时候打破它。它可能会打破这个。在这些花哨的新J-I-T年轻的whippersnapper浏览器中往往会发生的事情是它们会击中所有键,但也会发现所有愚蠢的阵列属性,IMO。这是一个打字灯和更有效的循环数组的方法(请记住它倒退):
var i = markersArray.length
while(i--){
markersArray[i].setMap(null);
}
如果不是这样,请检查HTML。如果你已经破坏了HTML,那么其他浏览器可能足够聪明,可以弄清楚如何将它拼凑在一起(再次,太聪明的IMO),而IE8将像曼哈顿项目的零点处的金丝雀一样发挥作用。
不,真的,停止在数组上使用for / in。即使它起作用也可能是一团糟。
答案 1 :(得分:0)
添加缓存:false,触发IE8以始终获取最新的json并按预期更新标记。
function addMarker() {
$.ajax({
type: "GET",
url: "newdata.json",
async: false,
cache: false,
dataType: "json",
success: function(data){
for (var i = 0, dataPoint; dataPoint = data.points[i]; i++) {
var latLng = new google.maps.LatLng(dataPoint.lat,dataPoint.long);
var marker = new google.maps.Marker({
position: latLng
});
markersArray.push(marker);
}
markerCluster = new MarkerClusterer(map, markersArray);
}
});
}