2011-10-10 86 views
1

我正嘗試使用「setInterval」重新加載包含嵌入式Google地圖的頁面。javascript setInterval不工作?

當我使用:

var marker = createMarker (point, id); 

頁運行正常(一次)。但是當我嘗試:

var marker = setInterval (function() {createMarker (point, id);}, 5000); 

自動刷新頁面,就會出現以下錯誤:

main.js:686Uncaught TypeError: Object 8 has no method 'initialize 

任何想法?提前致謝!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/> 
    <!--<META HTTP-EQUIV="refresh" CONTENT="15">--> 
    <title>Position</title> 

    <script src="http://maps.google.com/maps?file=api&v=2&key=" 
      type="text/javascript"></script> 
    <script type="text/javascript" > 
    //<![CDATA[ 

    var icon = new google.maps.MarkerImage("http://maps.google.com/mapfiles/ms/micons/blue.png", 
       new google.maps.Size(32, 32), 
       new google.maps.Point(0, 0), 
       new google.maps.Point(16, 32) 
      ); 

    function load() { 
     if (GBrowserIsCompatible()) { 
     //create map and center it 
     var map = new GMap2(document.getElementById("map")); 
     map.addControl(new GSmallMapControl()); 
     map.addControl(new GMapTypeControl()); 

     GDownloadUrl("gen_xml.php", function(data) { 
      var xml = GXml.parse(data); 
      var markers = xml.documentElement.getElementsByTagName("marker"); 
      for (var i = 0; i < markers.length; i++) { 
      var id = markers[i].getAttribute("id"); 
      var point = new GLatLng(
        parseFloat(markers[i].getAttribute("latitude")), 
        parseFloat(markers[i].getAttribute("longitude")) 
      ); 
      //var marker = createMarker(point, id); 
      var marker = setInterval(function(){createMarker(point, id);},5000); 
      map.addOverlay(marker); 
      map.setCenter(point,17); 

      } 
     }); 

     } 
    } 

    function createMarker(point, id) { 
     var marker = new GMarker(point, icon); 
     var html = "<b>" + id + "</b> <br/>" + point; 
     GEvent.addListener(marker, 'click', function() { 
     marker.openInfoWindowHtml(html); 
     }); 
     return marker; 
    } 

    //]]> 
    </script> 
    </head> 

    <body onload="load()" onunload="GUnload()"> 
    <center> 
    <div id="map" style="width: 800px; height: 600px"></div> 
    </center> 
    </body> 
</html> 
+0

看起來你在那裏使用Google Maps 2和3 API。 'maps?file = api&v = 2',但google.maps。*'是'v3'我相信。 – Chad

回答

3

setInterval返回一個整數,而不是值createMarker()回報。使用createMarkersetInterval回調中返回的值。

setInterval(function() 
{ 
    var marker = createMarker(point, id); 
    map.addOverlay(marker); 
    map.setCenter(point, 17); 
}, 5000); 

你也可以看到classic JS function-in-a-loop problem

+0

Thankx馬特球!!! – GianMira