javascript setInterval не работает? - PullRequest
1 голос
/ 10 октября 2011

Я пытаюсь использовать "setInterval", чтобы перезагрузить страницу, которая содержит встроенные GoogleMap.

Когда я использую:

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>

1 Ответ

3 голосов
/ 10 октября 2011

setInterval возвращает целое число, а не значение, которое возвращает createMarker().Используйте значение, возвращаемое createMarker в обратном вызове setInterval.

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

Вы также можете увидеть классическую проблему JS-функции в цикле .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...